YEAR(AVG(UNIX(date)))与ROUND(AVG(YEAR(date)))不同

时间:2018-11-30 13:10:54

标签: mysql sql datetime unix-timestamp

总结一个练习题:
我需要从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
出于明确的原因,第二个查询更好,但是为什么结果不同?

1 个答案:

答案 0 :(得分:1)

似乎您的数据包含早于1970-01-01的日期。 UNIX_TIMESTAMP()函数针对早于日期的日期返回0:

SELECT UNIX_TIMESTAMP('1969-12-31')
-- 0

因此,第一个查询的结果存在偏差,因为它不能正确计数<1970年的日期。