我对sum运行以下查询,然后得到完全相同的答案
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函数运行上述查询时,两个查询都会给出不同的输出。
最佳答案
假设你有以下数据:
monday 1
tuesday 2
tuesday 3
第一个查询查看最后两行。总和是5,平均是2.5,行数是2。
第二个查询查看所有行。对于第一行,它将数字1替换为0。总数仍然是5,但现在的平均数是5/3,行数是3。
对于总和,值为0的额外行无关紧要。但0的额外行确实会影响其他聚合计数、最小值、最大值和平均值。