【SQL优化】条件逻辑判断“case when then”

本文通过实例详细解析了 SQL 中 Case When 语句的使用方法,包括基本语法、如何在 Group By 子句中嵌入 Case When 逻辑判断等,并展示了其在报表 SQL 中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL> select dummy from dual;


D
-
X


SQL>

看下面的case when语句:

select case

         when dummy = 'X' then
          '1'
         when dummy <> 'Y' then
          '2'
         else
          '0'
       end

  from dual;

该返回什么?


SQL> select case
  2           when dummy = 'X' then
  3            '1'
  4           when dummy <> 'Y' then
  5            '2'
  6           else
  7            '0'
  8         end
  9    from dual;


C
-
1


SQL>

当第一个when子句判断成功时,整个case逻辑判断就返回数据并立即结束。c语言也是这样的吗?搞忘了。


在group by子句中也可以有效地嵌入case when 的逻辑判断,这可以使得代码更加精炼:

SQL> select (case
  2           when sal <= 1000 then
  3            '低档'
  4           when sal <= 2000 then
  5            '较低档'
  6           when sal <= 3000 then
  7            '中档'
  8           when sal <= 4000 then
  9            '高档'
 10           else
 11            '较高档'
 12         end) as 档次, count(*)
 13    from emp
 14   group by (case
 15              when sal <= 1000 then
 16               '低档'
 17              when sal <= 2000 then
 18               '较低档'
 19              when sal <= 3000 then
 20               '中档'
 21              when sal <= 4000 then
 22               '高档'
 23              else
 24               '较高档'
 25            end)
 26  ;


档次     COUNT(*)
------ ----------
较高档          1
中档            5
较低档          7
低档            1


SQL>

这种用法,在报表sql中比较常见。

### SQL CASE WHEN 语句的用法及条件逻辑示例 SQL中的 `CASE WHEN` 语句是一种强大的条件表达式工具,用于根据不同的条件返回不同的值。它在查询中灵活处理多种情况时非常有用,能够实现复杂的逻辑分支和数据转换。 #### 基本语法 `CASE WHEN` 的基本语法分为两种形式:简单形式和搜索形式。以下是两者的详细说明: 1. **简单形式**: 简单形式适用于直接比较列值的情况。 ```sql CASE column_name WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END ``` 这种形式将 `column_name` 的值与每个 `WHEN` 子句中的值进行比较,并返回第一个匹配的 `result`[^1]。 2. **搜索形式**: 搜索形式允许使用更复杂的条件表达式。 ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` 在这种形式中,`WHEN` 后面可以是任意布尔表达式,而不是简单的值比较[^2]。 #### 条件逻辑示例 以下是一些具体的示例,展示如何在 SQL 查询中使用 `CASE WHEN` 实现条件逻辑。 1. **根据体重判断健康状态**: 示例代码展示了如何根据体重值判断一个人是否偏重、偏轻或正常。 ```sql SELECT fname, fweight, CASE WHEN fweight < 40 THEN 'thin' WHEN fweight > 50 THEN 'fat' ELSE 'ok' END AS isnormal FROM T_person; ``` 在此查询中,`CASE WHEN` 根据 `fweight` 列的值返回相应的字符串描述[^4]。 2. **根据销售额计算奖金等级**: 假设有一个销售表 `T_sales`,其中包含销售人员的销售额 `sales_amount`,需要根据销售额计算奖金等级。 ```sql SELECT employee_id, sales_amount, CASE WHEN sales_amount >= 10000 THEN 'High' WHEN sales_amount BETWEEN 5000 AND 9999 THEN 'Medium' ELSE 'Low' END AS bonus_level FROM T_sales; ``` 3. **嵌套使用 `CASE WHEN`**: 如果需要处理更加复杂的逻辑,可以嵌套使用 `CASE WHEN`。 ```sql SELECT fname, fweight, CASE WHEN fweight < 40 THEN 'Underweight' WHEN fweight > 50 THEN CASE WHEN fweight > 80 THEN 'Obese' ELSE 'Overweight' END ELSE 'Normal' END AS health_status FROM T_person; ``` #### 注意事项 - 使用 `CASE WHEN` 时,`ELSE` 子句是可选的,但如果省略且没有匹配的条件,则返回 `NULL`[^3]。 - 尽量避免在性能敏感的查询中滥用 `CASE WHEN`,尤其是在大数据集上。如果可能,优先在 `WHERE` 子句中进行条件筛选[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值