我有一个带有时间字段的SQL数据库。
运行时间字段包含02:06:24, 00:01:12
等...
我正在尝试使用以下方式返回该字段的平均值,格式为HH:MM:SS:
SELECT AVG( runtime )
FROM `result`
这返回8312.2342729307
,我认为这是以秒为单位的平均值,但是当转换成分钟时是不正确的。
我能够以正确的格式返回最小值和最大值,但无法获得平均值,我该怎么做?
如果失败了,有没有办法选择中间元素作为中位数平均值?
我有一个带有时间字段的SQL数据库。
运行时间字段包含02:06:24, 00:01:12
等...
我正在尝试使用以下方式返回该字段的平均值,格式为HH:MM:SS:
SELECT AVG( runtime )
FROM `result`
这返回8312.2342729307
,我认为这是以秒为单位的平均值,但是当转换成分钟时是不正确的。
我能够以正确的格式返回最小值和最大值,但无法获得平均值,我该怎么做?
如果失败了,有没有办法选择中间元素作为中位数平均值?
SELECT SEC_TO_TIME((TIME_TO_SEC('02:06:24')+TIME_TO_SEC('00:01:12'))/2) x;
+----------+
| x |
+----------+
| 01:03:48 |
+----------+
对于DATETIME/TIME类型,无法使用AVG()函数。
我将DATETIME转换为DECIMAL(18,6),这样可以得到相当 (+-几毫秒) 精确的结果。
SELECT cast(CAST( AVG( CAST( runtime AS DECIMAL( 18, 6 ) ) ) AS DATETIME ) as time)
FROM dbo.result;
AVG()
函数也将 01:30:00
视为 13000
。如果有人能找到解释这一点的手册页面,请在此处发布。 - Álvaro González