在 MySQL 中使用 ORDER BY 进行 ROLLUP

Posted

技术标签:

【中文标题】在 MySQL 中使用 ORDER BY 进行 ROLLUP【英文标题】:ROLLUP with ORDER BY in MySQL 【发布时间】:2021-12-04 17:23:16 【问题描述】:

我在 mysql 中的查询有问题。 我的查询:

SELECT year, person, SUM(amount) AS total_amount FROM rentals
GROUP BY year, person WITH ROLLUP
ORDER BY year DESC;

给我这样的响应错误:

错误代码:1221。CUBE/ROLLUP 和 ORDER BY 用法不正确

我在 *** 的其他帖子中读到,在 MySQL 中,在一个查询中使用 ROLLUP 和 ORDER BY 可能会出现问题,我知道我可以使用子查询来做到这一点,但关键是可能一个月前我可以进行此查询,昨天问题已经开始。前几天我打开了 ONLY FULL GROUP BY 模式,会是这个原因吗? 我该怎么做才能像以前一样在一个查询中使用带有 order by 的汇总?我想让我不必使用子查询,因为我知道有一些可能性(就像以前一样)。

【问题讨论】:

不,错误不是来自那里,您的版本在 mysql 8 中与 fullgroupby 不兼容,运行没有问题 请运行SELECT version() 明确确认您拥有的确切版本的 MySQL。 【参考方案1】:

您的错误消息来自 MySQL 5.7 或更早版本。这种结构只能在 MySQL 8 中使用

CREATE tABLE rentals(year int , person varchar(20), amount BIGINT )
SELECT year, person, SUM(amount) AS total_amount FROM rentals
GROUP BY year, person WITH ROLLUP
ORDER BY year DESC;
年份 |人 |总金额 ---: | :----- | ------------:

db小提琴here

在 MYSQL 5.7 中 你要跑了

CREATE tABLE rentals(year int , person varchar(20), amount BIGINT )
SELECT * 
FROM 

(SELECT year, person,SUM(amount)
FROM rentals
GROUP BY year, person WITH ROLLUP) t1
ORDER BY year DESC;
年份 |人 | SUM(金额) ---: | :----- | ----------:

db小提琴here

【讨论】:

正好从 8.0.12 开始 我已经读到我有版本 8.0.26 - 所以这是最新的,在这个版本中我不能使用汇总和 order by?只有在以前的版本中才有可能是吗? 奇怪的是我能做到,但没有给出该消息,但我添加了一个版本,它也应该运行并且做同样的事情

以上是关于在 MySQL 中使用 ORDER BY 进行 ROLLUP的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 排序:语法及案例剖析在命令提示符中使用 ORDER BY 子句

mysql中order by工作原理与调优

使用 LIKE 字在 mySQL 中定义自定义 ORDER BY 顺序

在 mysql 中使用 union 和 order by 子句

sql [mysql:ORDER BY中的CASE]在mysql的ORDER BY中使用CASE。 #mysql #sql

Mysql order by与limit混用陷阱