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

SQL:CASE WHEN使用详解

文章目录

      • 1. 数据转换与映射
      • 2. 动态条件筛选
      • 3. 多条件分组统计
      • 4. 数据排名与分级
      • 5. 处理空值与默认值
      • 6. 动态排序

CASE WHEN 语句在 SQL 中是一个非常强大且灵活的工具,除了常规的条件判断外,还有很多巧妙的用法,以下为你详细总结:

1. 数据转换与映射

  • 用途:将一列中的值根据特定规则映射为其他值,常用于数据清洗和标准化。
  • 示例:假设有一个 products 表,其中 category 列包含值 'electronics''clothing' 等,要将这些英文类别转换为中文。
SELECT 
    product_id,
    category,
    CASE category
        WHEN 'electronics' THEN '电子产品'
        WHEN 'clothing' THEN '服装'
        ELSE '其他'
    END AS chinese_category
FROM 
    products;

2. 动态条件筛选

  • 用途:根据不同的条件动态筛选数据,实现类似参数化查询的功能。
  • 示例:假设有一个 orders 表,包含 order_dateamount 列,要根据不同的时间范围筛选出不同金额的订单。
SELECT 
    order_id,
    order_date,
    amount
FROM 
    orders
WHERE 
    CASE 
        WHEN MONTH(order_date) BETWEEN 1 AND 6 THEN amount > 100
        WHEN MONTH(order_date) BETWEEN 7 AND 12 THEN amount > 200
        ELSE 1 = 1  -- 不筛选
    END;

3. 多条件分组统计

  • 用途:结合聚合函数,根据多个条件对数据进行分组统计。
  • 示例:假设有一个 employees 表,包含 departmentsalary 列,要统计不同部门不同薪水范围的员工数量。
SELECT 
    department,
    SUM(CASE WHEN salary < 3000 THEN 1 ELSE 0 END) AS low_salary_count,
    SUM(CASE WHEN salary >= 3000 AND salary < 6000 THEN 1 ELSE 0 END) AS medium_salary_count,
    SUM(CASE WHEN salary >= 6000 THEN 1 ELSE 0 END) AS high_salary_count
FROM 
    employees
GROUP BY 
    department;

4. 数据排名与分级

  • 用途:根据某列的值对数据进行排名或分级。
  • 示例:假设有一个 students 表,包含 student_idscore 列,要根据成绩对学生进行分级。
SELECT 
    student_id,
    score,
    CASE 
        WHEN score >= 90 THEN 'A'
        WHEN score >= 80 THEN 'B'
        WHEN score >= 70 THEN 'C'
        WHEN score >= 60 THEN 'D'
        ELSE 'F'
    END AS grade
FROM 
    students;

5. 处理空值与默认值

  • 用途:在查询结果中对空值进行处理,为其设置默认值。
  • 示例:假设有一个 customers 表,包含 customer_nameemail 列,若 email 为空,则显示默认值 '未提供邮箱'
SELECT 
    customer_name,
    CASE 
        WHEN email IS NULL THEN '未提供邮箱'
        ELSE email
    END AS email_info
FROM 
    customers;

6. 动态排序

  • 用途:根据不同的条件对查询结果进行动态排序。
  • 示例:假设有一个 products 表,包含 product_namepricesales_volume 列,要根据不同的条件对产品进行排序。
SELECT 
    product_name,
    price,
    sales_volume
FROM 
    products
ORDER BY 
    CASE 
        WHEN 'price' = 'price' THEN price
        WHEN 'sales_volume' = 'sales_volume' THEN sales_volume
        ELSE product_name
    END;

这些巧妙用法可以让你在处理复杂的 SQL 查询时更加灵活和高效,根据具体的业务需求选择合适的用法来实现所需的功能。

相关文章:

  • 二层网络综合实验
  • 从 JDK 11 到 JDK 17:OpenRewrite 实战 Spring Boot 升级指南
  • 项目-苍穹外卖(十七) Apache POI+导出数据
  • 路由器DHCP地址池冲突
  • 【网络协议详解】—— STP 、RSTP、MSTP技术(学习笔记)
  • 15 网络编程:三要素(IP地址、端口、协议)、UDP通信实现和TCP通信实现 (黑马Java视频笔记)
  • C语言复习笔记--操作符详解(下)
  • 蓝桥杯 之 LCA算法
  • 搜广推校招面经六十一
  • 多线程案例-单例模式
  • Tcp套接字编程
  • go - grpc入门
  • 5G_WiFi_CE_杂散测试
  • C语言入门教程100讲(0)从了解C语言的发展史开始
  • 3月29日星期六今日早报简报微语报早读
  • 【Qt】Qt 类的继承与内存管理详解:QObject、信号槽与隐式共享
  • Conda配置Python环境
  • 实时目标检测新突破:AnytimeYOLO——随时中断的YOLO优化框架解析
  • 侯捷 C++ 课程学习笔记:C++ 中引用与指针的深度剖析
  • CS2 DEMO导入blender(慢慢更新咯)
  • 贵州茅台一季度净利268亿元增长11.56%,系列酒营收增近两成
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 诗词文赋俱当歌,听一听古诗词中的音乐性
  • 海南旅文局通报游客入住酒店港币被调包:成立调查组赴陵水调查
  • 出国留学、来华留学呈现双增新趋势,“00后留学生个性鲜明”
  • 新版国家卫生监督抽查计划发布,首次明确打击网络“医托”