在 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 )
年份 |人 | SUM(金额) ---: | :----- | ----------:SELECT * FROM (SELECT year, person,SUM(amount) FROM rentals GROUP BY year, person WITH ROLLUP) t1 ORDER BY year DESC;
db小提琴here
【讨论】:
正好从 8.0.12 开始 我已经读到我有版本 8.0.26 - 所以这是最新的,在这个版本中我不能使用汇总和 order by?只有在以前的版本中才有可能是吗? 奇怪的是我能做到,但没有给出该消息,但我添加了一个版本,它也应该运行并且做同样的事情以上是关于在 MySQL 中使用 ORDER BY 进行 ROLLUP的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 排序:语法及案例剖析在命令提示符中使用 ORDER BY 子句
使用 LIKE 字在 mySQL 中定义自定义 ORDER BY 顺序
在 mysql 中使用 union 和 order by 子句
sql [mysql:ORDER BY中的CASE]在mysql的ORDER BY中使用CASE。 #mysql #sql