跳转到主内容
极星编程网:以代码为星,赴技术山海!

SQL SELECT 如何进行多列分组排序?

先按部门分组再按职位细分,并统计人数后排序。使用GROUP BY多列实现分组,ORDER BY多列实现优先按部门升序、再按人数降序排列,非聚合字段须在GROUP BY中出现,可引用别名排序。 在 SQL 中, SELECT 语句可以通过 GROUP BY 和 ORDER BY 实现多列分组和排序。虽然 GROUP BY 本身不进行“排序”,但常与 ORDER BY 配合使用来达到分组后有序展示的效果。 多列分组(GROUP BY 多列) 使用 GROUP BY 对多个字段进行分组时,数据会先按第一个字段分组,组内再按第二个字段分组,以此类推。适用于需要统计每个组合类别下聚合信息的场景。 例如,按部门和职位统计员工人数:
SELECT department, position, COUNT(*) AS employee_count FROM employees GROUP BY department, position;
这条语句会把数据先按 department 分组,每组内再按 position 细分,最后统计每个“部门-职位”组合的人数。 MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载 分组后多列排序(ORDER BY 多列) 分组完成后,若想对结果排序,使用 ORDER BY 指定多个列。排序规则是:优先按第一列排,值相同时按第二列排,依此类推。 继续上面的例子,先按部门升序,同一部门内按职位人数降序 排列 :
SELECT department, position, COUNT(*) AS employee_count FROM employees GROUP BY department, position ORDER BY department ASC, employee_count DESC;
注意事项 SELECT 中出现的非聚合字段必须出现在 GROUP BY 子句中,否则会报错(MySQL 严格模式下)。 ORDER BY 可引用 SELECT 中定义的别名(如 employee_count),但 GROUP BY 一般不建议用别名(部分数据库不支持)。 ASC 为升序(默认),DESC 为降序,可混合使用。 基本上就这些。掌握 GROUP BY 和 ORDER BY 的多列配合,能灵活处理大多数分组统计并有序输出的需求。

相关文章