【问题标题】:MySQL functions COUNT/MIN/MAX issueMySQL 函数 COUNT/MIN/MAX 问题
【发布时间】:2023-03-26 02:47:01
【问题描述】:

我运行以下查询求和然后我得到完全相同的答案

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 运行上述查询时,两个查询都会给出不同的输出。

【问题讨论】:

  • 尝试一些交叉检查,比如在不使用聚合函数的情况下查看两个查询中有多少条记录和哪些记录
  • 显示一些样本数据集@fiddle没有这个我们帮不了你,你只能有我们的建议

标签: mysql sql sum average


【解决方案1】:

假设你有以下数据:

monday    1
tuesday   2
tuesday   3

您的第一个查询会查看最后两行。总和为5,平均为2.5,行数为2。

您的第二个查询查看所有行。对于第一行,它将数字 1 替换为 0。总和仍然是 5,但现在平均值是 5/3,行数是 3。

对于总和,值为 0 的额外行无关紧要。但是带有 0 的额外行确实会影响其他聚合计数、最小值、最大值和平均值。

【讨论】:

  • ... 因此,如果 IF() 函数的最后一个参数从逻辑错误的 0 更改为 NULL,则两个查询应该返回相同结果。
  • 是的,我从 0 更改为 Null,现在返回相同的结果
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 2011-11-20
相关资源
最近更新 更多