2016-04-24 55 views
0

我已經寫下面的查詢並獲取好的數據, 然後讓總僱傭少於折扣展示的淨僱傭的正確方法是什麼?我寫的腳本給了我1分支的空值,我知道這是不正確的?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

是的折扣可以是空的 – mmmmmme

+0

有這個偉大的網站的SQL示例:sqlfiddle.com如果你建立一個模式並添加一些示例數據,它將會更容易幫助你。 – Terminus

回答

0

假設你的查詢將不會拋出不明確的列錯誤,這可以制定出適合您。如果您知道折扣可以爲空,則在執行聚合時使用ifnull()。如果你正在做總和,那麼你可以使用總和(ifnull(折扣,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)返回值discount_$,除非它是null,在這種情況下,它將返回0

請注意,我沒有試圖總結任何列,但原則仍然成立。