SQL中CASE WHEN THEN ELSE END的用法详解

简介: SQL中CASE WHEN THEN ELSE END的用法详解

1. CASE WHEN THEN ELSE END的基本语法

CASE WHEN THEN ELSE END 是SQL中用于条件判断的表达式,其基本语法如下:

SELECT
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
  END
FROM table;
  • condition1, condition2, …:条件表达式,当满足某个条件时执行对应的 result
  • result1, result2, …:满足相应条件时返回的结果。
  • ELSE default_result:可选项,当所有条件都不满足时返回的默认结果。

2. 简单示例

让我们通过一个简单的示例来说明 CASE WHEN THEN ELSE END 的用法。假设有一个员工表,我们想根据员工的薪水水平给予不同的评价。

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary > 50000 THEN '高薪水'
    WHEN salary > 30000 THEN '中薪水'
    ELSE '低薪水'
  END AS salary_evaluation
FROM employees;

在上述示例中,我们使用了 CASE WHEN THEN ELSE END 来根据员工的薪水水平进行评价,将不同薪水水平的员工分为“高薪水”、“中薪水”和“低薪水”三个类别。

3. 多条件判断

CASE WHEN THEN ELSE END 还支持多条件判断,可以根据需要增加更多的 WHEN 子句。例如,我们想对员工的薪水水平和工作地点进行综合评价。

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary > 50000 AND location = '北京' THEN '高薪高地'
    WHEN salary > 50000 AND location = '上海' THEN '高薪高地'
    WHEN salary > 30000 THEN '中薪水'
    ELSE '低薪水'
  END AS salary_location_evaluation
FROM employees;

在这个示例中,我们通过增加 AND location = '北京'AND location = '上海' 的条件,实现了对薪水水平和工作地点的联合评价。

4. 使用CASE进行计算

除了简单的条件判断,CASE WHEN THEN ELSE END 还可以进行计算,生成更加复杂的结果。例如,我们想计算员工的绩效奖金。

SELECT
  employee_name,
  salary,
  CASE
    WHEN performance_rating = '优秀' THEN salary * 0.2
    WHEN performance_rating = '良好' THEN salary * 0.1
    ELSE salary * 0.05
  END AS performance_bonus
FROM employees;

在上述示例中,我们根据员工的绩效评级计算了不同绩效等级的奖金,以更精细地反映员工的绩效表现。

5. CASE与聚合函数的结合

CASE WHEN THEN ELSE END 还常常与聚合函数一同使用,实现对数据的更精细的汇总和分类。例如,我们想统计不同薪水水平的员工数量。

SELECT
  CASE
    WHEN salary > 50000 THEN '高薪水'
    WHEN salary > 30000 THEN '中薪水'
    ELSE '低薪水'
  END AS salary_level,
  COUNT(*) AS employee_count
FROM employees
GROUP BY salary_level;

在这个例子中,我们使用 CASE WHEN THEN ELSE END 将员工分为不同的薪水水平,并通过 COUNT(*) 统计每个水平的员工数量,实现了对员工薪水水平的汇总统计。

6. 嵌套CASE语句

在一些复杂的场景中,可能需要嵌套使用 CASE WHEN THEN ELSE END 语句,以实现更多层次的条件判断。例如,我们想根据员工的薪水和绩效评级分别进行评价。

SELECT
  employee_name,
  salary,
  CASE
    WHEN salary
 > 50000 THEN
      CASE
        WHEN performance_rating = '优秀' THEN '高薪优秀'
        WHEN performance_rating = '良好' THEN '高薪良好'
        ELSE '高薪一般'
      END
    WHEN salary > 30000 THEN
      CASE
        WHEN performance_rating = '优秀' THEN '中薪优秀'
        WHEN performance_rating = '良好' THEN '中薪良好'
        ELSE '中薪一般'
      END
    ELSE
      CASE
        WHEN performance_rating = '优秀' THEN '低薪优秀'
        WHEN performance_rating = '良好' THEN '低薪良好'
        ELSE '低薪一般'
      END
  END AS salary_performance_evaluation
FROM employees;

7. CASE WHEN的注意事项

  • CASE WHEN THEN ELSE END 可以用于任何SQL语句中,包括 SELECTWHEREORDER BY 等。
  • 当条件判断较为简单时,可以使用 CASE WHEN 的缩写形式 CASE column_name WHEN value THEN result END

8. 实际应用案例

让我们通过一个实际的应用案例来演示 CASE WHEN THEN ELSE END 的用法:

SELECT
  product_name,
  price,
  CASE
    WHEN price > 1000 THEN '高价商品'
    WHEN price > 500 THEN '中价商品'
    ELSE '低价商品'
  END AS price_category
FROM products;

9. 总结

CASE WHEN THEN ELSE END 是SQL中强大的条件表达式,为我们在查询过程中提供了灵活的条件判断和结果返回方式。通过本文的详细解析,相信你对 CASE WHEN THEN ELSE END 已经有了更深入的理解。

相关文章
|
3天前
|
SQL 存储 机器人
SQL Server 中 RAISERROR 的用法详解
SQL Server 中 RAISERROR 的用法详解
|
6天前
|
Java 数据库连接 数据库
java.sql.Timestamp用法总结
java.sql.Timestamp用法总结
|
6天前
|
SQL
SQL语句case when then else end用法
SQL语句case when then else end用法
|
2天前
|
SQL 数据挖掘 数据处理
SQL CASE WHEN语句的使用技巧
SQL CASE WHEN语句的使用技巧
|
6天前
|
SQL 数据处理 数据库
SQL中的DISTINCT用法总结
SQL中的DISTINCT用法总结
|
12天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
20天前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
247 1
|
1月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
164 1
|
4天前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之如何迁移SQL Server
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
21小时前
|
SQL 存储 测试技术