2014-06-08 72 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变为空,现在返回相同的结果 –