总结一个练习题:
我需要从datetime
列中查询平均年份。我最初的解决方法是YEAR(AVG())
所有日期。但是由于无法AVG()
和datetime
,我将日期转换为unix,然后转换为datetime:
SELECT
YEAR(FROM_UNIXTIME(AVG(UNIX_TIMESTAMP(date1))))
FROM table1;
哪个返回1980
正确的查询是:
SELECT
ROUND(AVG(YEAR(date1)))
FROM table1;
哪个返回1960
出于明确的原因,第二个查询更好,但是为什么结果不同?
答案 0 :(得分:1)
似乎您的数据包含早于1970-01-01
的日期。 UNIX_TIMESTAMP()
函数针对早于日期的日期返回0:
SELECT UNIX_TIMESTAMP('1969-12-31')
-- 0
因此,第一个查询的结果存在偏差,因为它不能正确计数<1970年的日期。