mysql – 在MariaDB中使用GROUP BY子句WITH ROLLUP的两个类似查询的工作差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 在MariaDB中使用GROUP BY子句WITH ROLLUP的两个类似查询的工作差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2218字,纯文字阅读大概需要4分钟。
内容图文
![mysql – 在MariaDB中使用GROUP BY子句WITH ROLLUP的两个类似查询的工作差异](/upload/InfoBanner/zyjiaocheng/903/ffc91d84c3d74281aa0edbd40f3eb440.jpg)
请帮助我理解为什么以下两个查询会返回不同的结果.查询的区别仅在于使用GROUP BY子句中的DATE_FORMAT函数.
查询1:
SELECT DATE_FORMAT(T0.ET,'%Y/%m/%d %H%i'), SUM(T0.AT)
FROM(SELECT TIMESTAMPADD(second,(SEQ -1)*300, STR_TO_DATE('20170809135000','%Y%m%d%H%i%s')) ET, 1 AT
FROM SEQ_1_TO_10
WHERE SEQ <= 5) T0
group by T0.ET with rollup
结果1:
'2017/08/09 1350', '1'
'2017/08/09 1355', '1'
'2017/08/09 1400', '1'
'2017/08/09 1405', '1'
'2017/08/09 1410', '1'
NULL, '5'
查询2:
SELECT DATE_FORMAT(T0.ET,'%Y/%m/%d %H%i') , SUM(T0.AT)
FROM(SELECT TIMESTAMPADD(second,(SEQ -1)*300, STR_TO_DATE('20170809135000','%Y%m%d%H%i%s')) ET, 1 AT
FROM SEQ_1_TO_10
WHERE SEQ <= 5) T0
group by DATE_FORMAT(T0.ET,'%Y/%m/%d %H%i') with rollup
结果2:
'2017/08/09 1350', '1'
'2017/08/09 1355', '1'
'2017/08/09 1400', '1'
'2017/08/09 1405', '1'
'2017/08/09 1410', '1'
'2017/08/09 1410', '5'
两个查询的EXPLAIN SELECT是相同的:
id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 'SEQ_1_TO_10', 'range', 'PRIMARY', 'PRIMARY','8', NULL, '5', 'Using where; Using index; Using filesort'
解决方法:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.1.14-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [sandbox]> SELECT typ ,DATE_FORMAT(T.ET,'%Y/%m/%d %H%i') et, sum(1)
-> FROM(
-> SELECT TIMESTAMPADD(second,(SEQ -1)*300, STR_TO_DATE('20170809135000','%Y%m%d%H%i%s')) ET,
-> case when seq % 2 = 0 then 'a' else 'b' end as typ
-> FROM SEQ_1_TO_10
-> WHERE SEQ <= 5
-> ) T
-> group by typ,DATE_FORMAT(T.ET,'%Y/%m/%d %H%i') with rollup;
+------+-----------------+--------+
| typ | et | sum(1) |
+------+-----------------+--------+
| a | 2017/08/09 1355 | 1 |
| a | 2017/08/09 1405 | 1 |
| a | 2017/08/09 1405 | 2 |
| b | 2017/08/09 1350 | 1 |
| b | 2017/08/09 1400 | 1 |
| b | 2017/08/09 1410 | 1 |
| b | 2017/08/09 1410 | 3 |
| NULL | 2017/08/09 1410 | 5 |
+------+-----------------+--------+
8 rows in set (0.00 sec)
内容总结
以上是互联网集市为您收集整理的mysql – 在MariaDB中使用GROUP BY子句WITH ROLLUP的两个类似查询的工作差异全部内容,希望文章能够帮你解决mysql – 在MariaDB中使用GROUP BY子句WITH ROLLUP的两个类似查询的工作差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。