如何返回 SQL 时间字段的平均值

8

我有一个带有时间字段的SQL数据库。

运行时间字段包含02:06:24, 00:01:12等...

我正在尝试使用以下方式返回该字段的平均值,格式为HH:MM:SS:

SELECT AVG( runtime )
FROM `result`

这返回8312.2342729307,我认为这是以秒为单位的平均值,但是当转换成分钟时是不正确的。

我能够以正确的格式返回最小值和最大值,但无法获得平均值,我该怎么做?

如果失败了,有没有办法选择中间元素作为中位数平均值?


你正在使用哪些数据库尚不清楚:仅限MySQL?还是其他的也在使用? - Jocelyn
说实话,我不确定,它托管在http://www.numyspace.co.uk/phpmyadmin上。 - Mark Taylforth
你认为两点钟和五点钟的平均值应该是什么?两点钟和五点钟的总和应该是多少? - Mike Sherrill 'Cat Recall'
@MikeSherrill'Catcall' - 问题说“运行时间”,所以不是两点钟。它只是以H:M:S表示的秒数。 - Álvaro González
在标准SQL中,秒数是与一天内的时间不同的数据类型。它被称为间隔。这两种不同的数据类型有很好的原因,如果平台不支持SQL间隔,您需要小心处理。 - Mike Sherrill 'Cat Recall'
2个回答

3
因此,举个例子...
SELECT SEC_TO_TIME((TIME_TO_SEC('02:06:24')+TIME_TO_SEC('00:01:12'))/2) x;
+----------+
| x        |
+----------+
| 01:03:48 |
+----------+

SELECT SEC_TO_TIME((TIME_TO_SEC('22:06:24')+TIME_TO_SEC('00:01:12'))/2) x;这个查询语句给出了错误的结果11:03:48.0000... 正确的结果应该是23:XX ... - Apoorva Shah
@ApoorvaShah,你的问题与最初提出的不同。另外,XX不是一个有效的时间。 - Strawberry
我不知道我是否被踩了。可能是有其他人做了。这可能只是巧合,我评论后你被踩了。 - Apoorva Shah
抱歉,我们的团队正在使用我的账户搜索相同的答案。我刚刚看到了来自我的账户的负投票。我现在正在进行正投票。再次抱歉。 - Apoorva Shah
请编辑答案,任何空格,然后我才能投票。 - Apoorva Shah
显示剩余2条评论

2

对于DATETIME/TIME类型,无法使用AVG()函数。

我将DATETIME转换为DECIMAL(18,6),这样可以得到相当 (+-几毫秒) 精确的结果。

SELECT cast(CAST( AVG( CAST( runtime AS DECIMAL( 18, 6 ) ) ) AS DATETIME ) as time)
FROM dbo.result;

它返回了一行,但是这是空的。 - Mark Taylforth
快速测试表明,即使在严格模式下,AVG() 函数也将 01:30:00 视为 13000。如果有人能找到解释这一点的手册页面,请在此处发布。 - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接