首页 文章

MariaDB / MySQL TO_SECONDS和AGGREGATE函数

提问于
浏览
2

我想使用带有聚合函数的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使用readline 5.1分发10.1.17-MariaDB,用于Linux(x86_64)

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

1 回答

  • 1

    这是一个奇怪的数据类型问题 . 以下工作:

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

    我不知道为什么 to_seconds() 的返回值足以在您选择它时存储该值,但是当您使用 group by 时会转换为整数 .

相关问题