gpt4 book ai didi

php - 日期时间列的平均值

转载 作者:行者123 更新时间:2023-11-29 04:41:38 25 4
gpt4 key购买 nike

我有下表和日期时间列:

id | datetime 
1 | 2014-12-01 20:00:00
2 | 2014-12-03 12:04:00
3 | 2014-12-04 10:15:00
4 | 2014-12-05 13:45:00
.. | ...etc

首先我只选择日期时间字段的小时和分钟,但我不知道如何在时间字段上选择平均值:

SELECT TIME_FORMAT(datetime, '%H:%i') as time FROM table_x;

最终结果应该是 HH:SS 格式的平均时间。

最佳答案

你问的没有意义。原因如下。

平均值,在算术平均值的意义上,是通过将值的总和 除以值的数量来计算的。 “2014-01-01 08:00 am”和“2014-01-01 09:00 am”的总和是多少?这是字面上的废话;您不能将上午 9:00 添加到上午 8:00。

作为 DateTime 类型值的集中趋势的度量,中位数和众数都有意义。但平均不会。

其他类型支持更好的平台让它更清晰。以 PostgreSQL 为例。

sandbox=# create table test (ts timestamp with time zone);
CREATE TABLE
sandbox=# insert into test values ('2014-01-01 08:00');
INSERT 0 1
sandbox=# insert into test values ('2014-01-01 09:00');
INSERT 0 1
sandbox=# select avg(ts) from test;
ERROR: function avg(timestamp with time zone) does not exist
LINE 1: select avg(ts) from test;
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
sandbox=# select sum(ts) from test;
ERROR: function sum(timestamp with time zone) does not exist
LINE 1: select sum(ts) from test;
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

通常,使用 MySQL 的人会尝试使用 DateTime 数据类型来表示时间间隔。这可能会造成混淆,因为时间间隔和时间点都使用相似的表示法。例如,如果您将值“08:00”解释为一个时间间隔,则它可能表示“八小时”。如果您将其解释为一个时间点,则可能表示“上午八点钟”。

MySQL 支持时间点数据类型。它 支持 SQL 间隔。但 PostgreSQL 有,这就是它的不同之处。

sandbox=# create table test (duration interval);
CREATE TABLE
sandbox=# insert into test values ('15 hours');
INSERT 0 1
sandbox=# insert into test values ('16 hours');
INSERT 0 1
sandbox=# select sum(duration) from test;
sum
----------
31:00:00
(1 row)

sandbox=# select avg(duration) from test;
avg
----------
15:30:00
(1 row)

区别:虽然将 8 点钟和 9 点钟相加或平均没有意义,但 将 8 小时和 9 小时相加并平均是有意义的。

如果您想在 MySQL 中存储一些比如 SQL 间隔,将它们存储为表示分钟或秒(或其他)的整数,并对整数进行算术运算。

关于php - 日期时间列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com