【发布时间】:2017-01-26 05:59:46
【问题描述】:
我想使用 TO_SECONDS 和聚合函数 (AVG, COUNT) 来汇总我的表。然而,结果并不是我所期望的。这是一个示例表:
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 小提琴:http://sqlfiddle.com/#!9/17616a/6
MariaDB 版本> mysql Ver 15.1 Distrib 10.1.17-MariaDB,适用于 Linux (x86_64),使用 readline 5.1
当然,我可以使用其他 DATE/TIME 函数(UNIX_TIMESTAMP 等)来执行任务。但是,我想知道为什么结果不同。
我错过了什么?我是否误解了 TO_SECONDS 的用法?
【问题讨论】:
-
这似乎是一个数据类型问题。返回值被视为整数而不是大整数。