信息发布→ 登录 注册 退出

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

发布时间:2025-10-13

点击量:
先按部门分组再按职位细分,并统计人数后排序。使用GROUP BY多列实现分组,ORDER BY多列实现优先按部门升序、再按人数降序排列,非聚合字段须在GROUP BY中出现,可引用别名排序。

在 SQL 中,SELECT 语句可以通过 GROUP BYORDER BY 实现多列分组和排序。虽然 GROUP BY 本身不进行“排序”,但常与 ORDER BY 配合使用来达到分组后有序展示的效果。

多列分组(GROUP BY 多列)

使用 GROUP BY 对多个字段进行分组时,数据会先按第一个字段分组,组内再按第二个字段分组,以此类推。适用于需要统计每个组合类别下聚合信息的场景。

例如,按部门和职位统计员工人数:

SELECT 
    department, 
    position, 
    COUNT(*) AS employee_count
FROM employees
GROUP BY department, position;

这条语句会把数据先按 department 分组,每组内再按 position 细分,最后统计每个“部门-职位”组合的人数。

分组后多列排序(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 的多列配合,能灵活处理大多数分组统计并有序输出的需求。

标签:# 再按  # 以此类推  # 适用于  # 出现在  # 依此类推  # 第一个  # 降序  # 按部  # 多个  # mysql  # 升序  # 数据库  # position  # 严格模式  # select  # sql  # 排列  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!