首页 > 解决方案 > Mysql SQL 语法按 [asc|desc] 分组?

问题描述

在使用 mysql8.0 时,它给出的GROUP BY语法如下:

[GROUP BY {col_name | expr | position}
  [ASC | DESC], ... [WITH ROLLUP]]

group by中的ascor有什么用?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

标签: mysqlsql

解决方案


MySQL 8.0 参考手册/.../SELECT 语句

在 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] 允许操纵这种隐式排序。现在只允许显式排序。


推荐阅读