当前位置: 首页 > 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.lryc.cn/news/597603.html

相关文章:

  • SparkSQL 聚合函数 MAX 对 NULL 值的处理
  • 基于多种机器学习的水质污染及安全预测分析系统的设计与实现【随机森林、XGBoost、LightGBM、SMOTE、贝叶斯优化】
  • 小白做投资测算,如何快速上手?
  • 网安-SQL注入-sqli-labs
  • OpenLayers 快速入门(七)矢量数据
  • Centos7.9多网卡绑定做链路聚合
  • 回顾 Palantir:八年之旅的反思
  • 《P4092 [HEOI2016/TJOI2016] 树》
  • 线段树学习笔记 - 练习题(1)
  • UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析
  • Neo4j 框架 初步简单使用(基础增删改查)
  • OpenEuler系统架构下编译redis的RPM包
  • 【基于OpenCV的图像处理】图像预处理之图像色彩空间转换以及图像灰度化处理
  • 【web页面接入Apple/google/facebook三方登录】
  • SQL基础⑥ | 聚合函数
  • Java项目中定时任务三方工具和技术的深度应用指南
  • Kubernetes 日志收集
  • biji 1
  • 事务与索引:数据库核心机制详解
  • 解析云蝠智能 VoiceAgent 的技术架构与应用实践
  • Linux第三天Linux基础命令(二)
  • 不同地区的主要搜索引擎工具
  • 原创-基于 PHP 和 MySQL 的证书管理系统 第三版
  • Windows 用 Python3 快速搭建 HTTP 服务器
  • 网络基础DAY18-动态路由协议基础
  • 观影《长安的荔枝》有感:SwiftUI 中像“荔枝转运”的关键技术及启示
  • Linux文件fd
  • 架构师--缓存场景
  • vmware分配了ubuntu空间但是ubuntu没有获取
  • python---列表(List)