mysql - Mysql SQL 语法按 [asc|desc] 分组?
问题描述
在使用 mysql8.0 时,它给出的GROUP BY
语法如下:
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
group by中的asc
or有什么用?desc
每次我尝试这样的事情时,我都会遇到语法错误并且以前从未见过这种语法,所以很好奇它的用法是什么以及它可能是什么例子。我用于测试的查询是:
SELECT
provider_id,
COUNT(*)
FROM
titles
GROUP BY
provider_id, -- a col_name
provider_id='Fox', -- an expression
1 -- a position
-- where does the ASC|DESC come into play?
WITH ROLLUP -- using rollup
ORDER BY COUNT(*) DESC
解决方案
在 MySQL 8.0.13 之前,MySQL 支持非标准语法扩展,该扩展允许 GROUP BY 列的显式 ASC 或 DESC 指示符。MySQL 8.0.12 及更高版本支持 ORDER BY 和分组功能,因此不再需要使用此扩展。(错误 #86312、错误 #26073525)这也意味着您可以在使用 GROUP BY 时对任意一列或多列进行排序,如下所示:
SELECT a, b, COUNT(c) AS t FROM test_table GROUP BY a,b ORDER BY a,t DESC;
从 MySQL 8.0.13 开始,不再支持 GROUP BY 扩展:不允许 GROUP BY 列的 ASC 或 DESC 指示符。
在早期版本中,GROUP BY 表达式通过相同的表达式导致隐式 ORDER BY(直到指定显式 ORDER BY 子句) - 并且 [ASC|DESC] 允许操纵这种隐式排序。现在只允许显式排序。
推荐阅读
- c++ - C Windows API确定用户是否在一段时间内不活动
- sql-server - 如何操作数据集以从不同的表中获取信息?
- ios - 使用 Swift 在 MailCore2 中实现 MCOHTMLRendererIMAPDelegate
- scala - 在scala数据框中合并地图
- javascript - 将 html2pdf pdf 或 html2canvas 图像发送到电子邮件
- javascript - 如何更改组件中基于 Javascript 的 css 属性
- html - Django:尽管提供了令牌,但 CSRF 验证失败
- python-3.7 - 无法安装功能 - 引擎模块
- java - 在用户回答“是”后尝试让程序返回主菜单以继续,或者如果用户回答“否”,则程序结束并显示总计消息
- mysql - java.sql.SQLSyntaxErrorException