gpt4 book ai didi

mysql - MariaDB/MySQL TO_SECONDS 和 AGGREGATE 函数

转载 作者:行者123 更新时间:2023-11-29 02:47:56 25 4
gpt4 key购买 nike

我想使用带有聚合函数(AVG、COUNT)的 TO_SECONDS 来汇总我的表。然而,结果并不是我所期望的。这是一个示例表:

MariaDB [test]> select * from mytable;
+----+---------------------+------+
| id | ts | val |
+----+---------------------+------+
| 1 | 2016-01-01 01:02:03 | 1 |
| 2 | 2016-01-01 01:02:04 | 2 |
| 3 | 2016-01-01 01:02:04 | 3 |
| 4 | 2016-01-01 01:02:05 | 4 |
| 5 | 2016-01-01 01:02:05 | 5 |
+----+---------------------+------+

查询 #1(确定):

MariaDB [test]> select to_seconds(ts) as tsec from mytable;
+-------------+
| tsec |
+-------------+
| 63618829323 |
| 63618829324 |
| 63618829324 |
| 63618829325 |
| 63618829325 |
+-------------+

查询#2(?):

MariaDB [test]> select to_seconds(ts) as tsec, avg(val) mval from mytable group by tsec;
+------------+------+
| tsec | mval |
+------------+------+
| 2147483647 | 3 |
+------------+------+

预期结果:

+-------------+------+
| tsec | mval |
+-------------+------+
| 63618829323 | 1 |
| 63618829324 | 2.5 |
| 63618829325 | 4.5 |
+-------------+------+

SQL fiddle :http://sqlfiddle.com/#!9/17616a/6
MariaDB version> mysql Ver 15.1 Distrib 10.1.17-MariaDB, for Linux (x86_64) using readline 5.1

当然我可以使用其他 DATE/TIME 函数(UNIX_TIMESTAMP 等)来执行任务。但是,我想知道为什么结果不同。
我错过了什么?我是否误解了 TO_SECONDS 的用法?

最佳答案

这是一个奇怪的数据类型问题。以下确实有效:

select cast(to_seconds(ts) as decimal(20, 0)) as tsec, avg(val)
from mytable
group by tsec;

我不知道为什么 to_seconds() 的返回值足够大,可以在您选择它时存储该值,但在您使用 group 时却被转换为整数通过

关于mysql - MariaDB/MySQL TO_SECONDS 和 AGGREGATE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39558035/

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