我对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的额外行确实会影响其他聚合计数、最小值、最大值和平均值。

10-05 18:31