2014-06-08 73 views
2

我運行以下的總和查詢,然後我得到完全相同的答案MySQL函數COUNT/MIN/MAX問題

SQL 1 ::

Select L_PARTKEY,sum(L_LINENUMBER) As A 
From lineitem 
Inner Join orders On orders.O_ORDERKEY = lineitem.L_ORDERKEY 
WHERE O_WEEKDAY='Tuesday' 
Group by L_PARTKEY 

SQL 2 ::

SELECT sum(IF(orders.O_WEEKDAY='Tuesday',L_LINENUMBER, 0)) As 'Tuesday' 
FROM lineitem 
INNER JOIN orders ON orders.O_ORDERKEY = lineitem.L_ORDERKEY 
GROUP BY lineitem.L_PARTKEY 

但是,當我用AVG/COUNT/MIN/MAX功能,而不是SUM運行上面的查詢,然後這兩個查詢給出了不同的輸出。

+0

嘗試一些交叉檢查,就像看到多少以及哪些記錄有兩個查詢,而無需使用聚合函數 – Dharmesh

+0

顯示一些樣本數據集[* @ *小提琴(http://sqlfiddle.com/)沒有這一點,我們可以對你沒有幫助,你只能有我們的建議 –

回答

2

假設你有以下數據:

monday 1 
tuesday 2 
tuesday 3 

你的第一個查詢看起來在最後兩行。和是5,平均2.5,行數爲2

你的第二個查詢看起來都行。對於第一行,它取代0總和仍然是5數字1,但現在的平均值爲5/3,並且行的數量是3。

爲總和,具有值額外行0無所謂。但隨着0額外行不影響其他聚集算,最大,最小和平均。

+0

...因此,如果IF()函數的最後一個參數從邏輯錯誤的'0'改變爲NULL,兩個查詢應該返回相同的結果。 –

+0

是的,我從0變爲空,現在返回相同的結果 –