2017-12-27 4 views
-2

私がfollowinのクエリを持っている:使用集計値

SELECT contracts.id, 
    (SELECT sum(pos.sum_to_pay) FROM pos 
    where pos.contract_id=contracts.id and pos.is_draft=0) as paid, 
    (SELECT sum(acts.amount) FROM acts 
    where acts.contract_id=contracts.id) as acts_sum 
from contracts 

それは動作しますが、私はacts_sum - paid = to_payのように計算されなければならない別の結果フィールドto_payを追加します。

私はこのようにそれをやろうとしている:

SELECT contracts.id, 
     (SELECT sum(pos.sum_to_pay) FROM pos 
     where pos.contract_id=contracts.id and pos.is_draft=0) as paid, 
     (SELECT sum(acts.amount) FROM acts 
     where acts.contract_id=contracts.id) as acts_sum, 
     (acts_sum - paid) as to_pay 
    from contracts 

が、私はエラーUnknown column 'acts_sum'を得ました。 の値はacts_sumpaidに基づいてどのように見つけることができますか?

答えて

1

あなたが使用してクエリを書き直すことができ、この

SELECT acts_sum, paid, (acts_sum - paid) as to_pay FROM 
(SELECT contracts.id, 
    (SELECT sum(pos.sum_to_pay) FROM pos 
    where pos.contract_id=contracts.id and pos.is_draft=0) as paid, 
    (SELECT sum(acts.amount) FROM acts 
    where acts.contract_id=contracts.id) as acts_sum, 
from contracts) subq 
+0

高価なソリューションとして遅すぎると考え相関サブクエリを結合@ Xingは既にそれを言っていた(彼のサブクエリは名前がないようだが)。 – cars10m

+0

私はサブクラスの命名は必須ではないと思います。ではない ? – XING

+0

最後に 'as subq'と動作します。ありがとう –

0

のようなサブクエリでそれを行う;-)、時には再び、うん

select c.id, 
COALESCE(a.acts_sum,0), 
COALESCE(p.paid,0), 
COALESCE(a.acts_sum,0) - COALESCE(p.paid,0) as to_pay 
from contracts c 
left join (
    SELECT contract_id,sum(sum_to_pay) paid 
    FROM pos 
    where is_draft=0 
    group by contract_id 
) p on c.id = p.contract_id 
left join (
    SELECT contract_id,sum(amount) acts_sum 
    FROM acts 
    group by contract_id 
) a on c.id = a.contract_id