我运行以下查询求和,然后我得到完全相同的答案
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 :(得分:2)
假设您有以下数据:
monday 1
tuesday 2
tuesday 3
您的第一个查询会查看最后两行。总和为5,平均值为2.5,行数为2。
您的第二个查询会查看所有行。对于第一行,它将数字1替换为0.总和仍为5,但平均值现在为5/3,行数为3.
总之,值为0的额外行无关紧要。但是额外的0行会影响其他聚合次数count,min,max和avg。