MySQL AVG TIME给出奇怪的行为

时间:2017-11-12 01:00:23

标签: mysql

在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`

然后结果是:

enter image description here

正如您所看到的,平均值大于最大值。这怎么可能。我在查询中做错了吗?

duration列是TIME(3)列。这代表了比赛的持续时间。

1 个答案:

答案 0 :(得分:2)

正如aggregate functions上的mysql手册所说:

  

SUM()和AVG()聚合函数不适用于temporal   值。 (他们将值转换为数字,之后丢失所有内容   第一个非数字字符。)要解决此问题,请转换   到数字单位,执行聚合操作,并转换回   时间价值。例子:

serializedValue

所以,这就是你需要做的事情:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;