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

SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

SQL 中 CASE WHEN 及 SELECT CASE WHEN 的用法

CASE WHEN 是 SQL 中非常实用的条件表达式,它允许你在查询中实现条件逻辑。以下是详细的用法说明:

1. 基本语法结构

CASE WHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_result
END

或者简单形式:

CASE expression WHEN value1 THEN result1WHEN value2 THEN result2...ELSE default_result
END

2. 在 SELECT 语句中的用法

示例1:简单条件判断

SELECT employee_name,salary,CASE WHEN salary > 10000 THEN '高薪'WHEN salary > 5000 THEN '中等'ELSE '一般'END AS salary_level
FROM employees;

示例2:等值比较(简单形式)

SELECT product_name,CASE category_idWHEN 1 THEN '电子产品'WHEN 2 THEN '服装'WHEN 3 THEN '食品'ELSE '其他'END AS category_name
FROM products;

3. 在 UPDATE 语句中的用法

UPDATE orders
SET discount = CASE WHEN order_amount > 1000 THEN 0.1WHEN order_amount > 500 THEN 0.05ELSE 0END;

4. 在 ORDER BY 中的用法

SELECT * FROM customers
ORDER BY CASE WHEN country = 'China' THEN 1WHEN country = 'USA' THEN 2ELSE 3END;

5. 在 GROUP BY 中的用法

SELECT CASE WHEN age < 20 THEN '青少年'WHEN age BETWEEN 20 AND 30 THEN '青年'ELSE '成年'END AS age_group,COUNT(*) AS count
FROM users
GROUP BY age_group;

6. 嵌套 CASE WHEN 用法

SELECT student_name,score,CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN CASE WHEN attendance_rate > 0.9 THEN 'B+'ELSE 'B'ENDWHEN score >= 70 THEN 'C'ELSE 'D'END AS grade
FROM students;

7. 在聚合函数中使用

SELECT department_id,SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS male_count,SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS female_count
FROM employees
GROUP BY department_id;

注意事项

  1. CASE WHEN 会按顺序判断条件,第一个满足的条件会被执行,后面的条件将被忽略
  2. 如果没有条件满足且没有 ELSE 子句,结果将为 NULL
  3. 所有 THEN 子句返回的数据类型应该兼容
  4. 在复杂的 CASE 表达式中,适当使用括号可以提高可读性

CASE WHEN 是 SQL 中非常强大的条件表达式,掌握它可以让你写出更加灵活和强大的查询语句。

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

相关文章:

  • HF86611_VB1/HF86611Q_VB1:多通道USB HiFi音频解码器固件技术解析
  • CLI 与 IDE 编码代理比较:提升开发效率的两种路径
  • docker安装minio及配置禁止列出目录文件
  • 解决Node 17+版本与Metro、Webpack等兼容性问题(500)
  • 【计算机网络】正/反向代理服务器,有状态/无状态应用
  • 构建高性能推荐系统:MixerService架构解析与核心实现
  • Spring-IoCDI
  • VPS海外部署Linux分布式计算任务调度-跨国资源整合方案
  • Git 常用的提交类型
  • Object Sense (OSE):一款从编辑器脚本发展起来的编程语言
  • 【数学建模 | Matlab】二维绘图 和 三维绘图
  • 2025年7月一区SCI-投影迭代优化算法Projection Iterative Methods-附Matlab免费代码
  • kotlin基础【1】
  • MATLAB 2024b深度学习新特性全面解析与DeepSeek大模型集成开发技术
  • android studio(NewsApiDemo)100%kotlin
  • 如何在 npm 上发布 Element Plus 二次封装组件
  • Oracle 常用 SQL 命令集合
  • 将 `knife4j` 和 `springdoc-openapi` 集成到你的 Spring Boot 应用
  • 微软Fabric重塑数据管理:Forrester报告揭示高ROI
  • 一次Oracle集群脑裂问题分析处理
  • 前端实现类浏览器的 Ctrl+F 全局搜索功能(Vue2 + mark.js,用于Electron 、QT等没有浏览器Ctrl+F全局搜索功能的壳子中)
  • Oracle迁移到高斯,查询字段默认小写,解决办法
  • Qt 常用控件 - 1
  • 分布式风电分散式风电
  • Qt内存管理的核心点
  • 技术速递|使用 Semantic Kernel 与 A2A 协议构建多智能体解决方案
  • MCP:UVX的安装
  • 计算机组成原理(一)
  • 架构师--缓存场景
  • 利用DeepSeek编写一个使用lzav算法的文件压缩工具