在TIME(3)属性上执行AVG时,我的行为令人困惑。
查询如下:
SELECT
SEC_TO_TIME(STD(`duration`)) standard_deviation,
SEC_TO_TIME(AVG(`duration`)) mean,
MIN(`duration`) min,
MAX(`duration`) max
FROM `races`
然后结果是:
正如您所看到的,平均值大于最大值。这怎么可能。我在查询中做错了吗?
duration
列是TIME(3)
列。这代表了比赛的持续时间。
答案 0 :(得分:2)
正如aggregate functions上的mysql手册所说:
SUM()和AVG()聚合函数不适用于temporal 值。 (他们将值转换为数字,之后丢失所有内容 第一个非数字字符。)要解决此问题,请转换 到数字单位,执行聚合操作,并转换回 时间价值。例子:
serializedValue
所以,这就是你需要做的事情:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;