当前位置: 首页 > news >正文

SQL GROUP BY 自定义排序规则

在 SQL 中,GROUP BY 子句用于将结果集按一个或多个列进行分组。默认情况下,GROUP BY 会按照列的自然顺序(如字母顺序或数字顺序)进行排序。如果你需要按照自定义的排序规则对结果进行分组,可以使用 ORDER BY 子句结合 CASE 语句来实现。


假设你有一个 orders 表,其中包含以下列:

  • order_id (订单ID)

  • customer_id (客户ID)

  • order_date (订单日期)

  • status (订单状态,如 'Pending', 'Shipped', 'Delivered', 'Cancelled')

你想按照 status 列进行分组,但希望按照自定义的顺序(如 'Pending', 'Shipped', 'Delivered', 'Cancelled')进行排序。

SELECT 
    status,
    COUNT(*) AS order_count
FROM 
    orders
GROUP BY 
    status
ORDER BY 
    CASE 
        WHEN status = 'Pending' THEN 1
        WHEN status = 'Shipped' THEN 2
        WHEN status = 'Delivered' THEN 3
        WHEN status = 'Cancelled' THEN 4
        ELSE 5
    END;

解释

  1. GROUP BY status: 按照 status 列进行分组。

  2. ORDER BY CASE: 使用 CASE 语句为每个 status 分配一个自定义的排序值。

    • 'Pending' 对应 1

    • 'Shipped' 对应 2

    • 'Delivered' 对应 3

    • 'Cancelled' 对应 4

    • 其他状态(如果有)对应 5

  3. COUNT(*) AS order_count: 计算每个状态下的订单数量。

结果

查询结果将按照自定义的顺序对 status 进行排序,并显示每个状态下的订单数量。

注意事项

  • CASE 语句中的排序值可以根据需要进行调整。

  • 如果你有更多的自定义排序需求,可以在 CASE 语句中添加更多的 WHEN 条件。

  • 如果 status 列中有 NULL 值,可以在 CASE 语句中添加 WHEN status IS NULL THEN ... 来处理。

通过这种方式,你可以灵活地控制 GROUP BY 结果的排序顺序,而不仅仅依赖于列的自然顺序。

http://www.dtcms.com/a/88474.html

相关文章:

  • Linux:一些命令记录
  • vue3+vite+js快速搭建前端项目
  • OpenCV正确安装及环境变量配置
  • Langchain 自定义工具和内置工具
  • 关于脏读,不可重复读和幻读
  • LeetCode热题100JS(69/100)第十三天|34|33|153|4|20
  • 论文写作篇#7:YOLO论文中的全称和缩写,什么时候全称什么时候缩写,全称和缩写谁在括号里?
  • 约束文件SDC常用命令
  • 【Go】数组
  • 中间件监控:保障应用稳定性和响应速度
  • Servlet中request、response、session 用法
  • C++学习笔记(二十五)——vector
  • OpenCV第2课 OpenCV的组成结构与图片/视频的加载及展示
  • MapReduce1中资源预先划分为固定数量的map slot和reduce slot,具体是怎么划分的?
  • 深度强化学习(Deep Reinforcement Learning, DRL)
  • java 批量下载doc\excle\pdf
  • leetcode-12.整数转罗马数字
  • git 标签学习笔记
  • Android Monkey测试完全指南:从入门到实战
  • allure结合pytest生成测试报告
  • chrome插件开发之API解析-chrome.tabs.query
  • 【智能搜索引擎技术】第四章搜索引擎索引构建(水课复习自用)
  • Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值
  • 识别并脱敏上传到deepseek/chatgpt的Word文件中的敏感信息
  • 视频知识库初步设想
  • 游戏摇杆开发:利用 Windows API 实现摇杆输入捕获
  • 【模拟面试】计算机考研复试集训(第十二天)
  • 开源在线客服系统源码-前端源码加载逻辑
  • VUE2导出el-table数据为excel并且按字段分多个sheet
  • 【算法】区间合并