2016-04-24 1 views
0

私は以下のクエリを書いて良いデータを得ました グロス雇用者にネット雇用者としての割引を控除する正しい方法は何ですか?私が書いたスクリプトは、私に1ブランチのnull値を与えて、これが間違っていることを知っていますか?不正なデータを与えるmySQLの計算

SELECT branch_name, gross_hire_$, discount_$ 
FROM m_rental R, m_vehicle V, m_branch B 
WHERE r.rego_no = v.rego_no 
AND v.branch_code = b.branch_code 
GROUP BY b.branch_code 
ORDER BY branch_name 
+0

'discount_ $'は** 'null' **ですか? –

+0

はい割引にはNULLを設定することができます – mmmmmme

+0

sqlの例としてこの素晴らしいサイトがあります:sqlfiddle.comスキーマを構築してサンプルデータを追加すると、より簡単に手助けすることができます。 – Terminus

答えて

0

クエリがあいまいな列エラーをスローしないであろうと仮定すると、これはあなたのために働くことができます。割引がNULLになることがわかっている場合は、集約を実行する際にifnull()を使用します。合計を実行している場合、sum(ifnull(discount、0))を使用できますが、平均を実行していて0以外のレコードの平均を求めたい場合は、次のようにします。

sum(case when discount is not null then discount else 0 end)/ 
sum(case when discount is not null then 1 else 0 end) 

しかし、現在のシナリオでは、以下はうまくいくはずです。あなたを

select branch_name, sum(ifnull(gross_hire,0)) as gross_hire, 
sum(ifnull(discount,0)) as discount from m_rental r, 
m_vehicle v, m_branch b where r.rego_no = v.rego_no 
and v.brand_code = b.branch_code group by b.branch_code order by branch_name; 
0

あなたはSELECTの列リストに算術演算を実行することができ、いつでもあなたは(あなたはいくつかの非ヌル値でnullを置き換えることができますし、)nullかもしれない列を持っていますSQL COALESCE関数を使用できます。

SELECT branch_name, gross_hire_$, discount_$, (gross_hire_$ - COALESCE(discount_$, 0)) AS net_hire_$ 
    FROM m_rental R, m_vehicle V, m_branch B 
    WHERE r.rego_no = v.rego_no 
    AND v.branch_code = b.branch_code 
    GROUP BY b.branch_code 
    ORDER BY branch_name 

があなたの目的に役立つはずです。 COALESCE(discount_$, 0)は、null以外の場合はdiscount_$の値を返します。この場合、0を返します。

私はすべての列を合計しようとはしていませんが、原則はまだ成立しています。

関連する問題