gpt4 book ai didi

mysql - 在 MariaDB 中使用 GROUP BY 子句 WITH ROLLUP 的两个类似查询的工作差异

转载 作者:可可西里 更新时间:2023-11-01 07:38:29 24 4
gpt4 key购买 nike

请帮助我理解为什么以下两个查询返回不同的结果。查询的区别仅在于在 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 的两个类似查询的工作差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429261/

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