【问题标题】:SQL: aggregate functions with DATE type columnsSQL:具有 DATE 类型列的聚合函数
【发布时间】:2012-06-14 19:42:00
【问题描述】:

我偶然发现了一个关于哪些聚合函数适用于 DATE 类型列的问题(在测试中)。因此,据我了解, COUNT 只会计算行数,而 MIN 和 MAX 返回最早/最晚日期。但是,我对 SUM 和 AVG 函数有点困惑。他们是否会将 DATE 值转换为整数并计算这些整数的总和/平均值?还是我在这里错了?无论如何,这种行为在所有 SQL 实现中是否一致? 提前致谢。

【问题讨论】:

  • "COUNT 只会计算行数"。实际上这并不完全正确。 COUNT(*) 计算行数是对的,但COUNT(somedatetypecolumn) 计算somedatetypecolumn 不为NULL 的行数。
  • 哦,对了,我说的不够明确。

标签: sql date aggregate-functions ansi-sql


【解决方案1】:

在 MS SQL Server 中,不能对 datetime 类型调用 SUM 运算符,也不能调用 AVG 运算符。

MSDN 在此处列出了SUM 运算符的返回类型:
http://msdn.microsoft.com/en-us/library/ms187810.aspx

它也是您可以调用SUM 运算符的类型的有效参考。

编辑:针对您的评论,您可以使用 sqlfiddle 之类的网站来测试各种实现

http://www.sqlfiddle.com/#!3/22cee/1

考虑到datetime 的后端存储不是标准化的,我认为任何数据库都不应该依赖它以可预测的方式返回SUMAVG 结果... . 最好不要这样做...

【讨论】:

  • 这很有趣,因为我在 MySQL 中的 DATE 类型列上尝试了 SUM 和 AVG,它返回的只是整数的总和和平均值。谢谢你的回答!
猜你喜欢
  • 2014-11-27
  • 2014-11-26
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 2010-11-15
  • 1970-01-01
相关资源
最近更新 更多