case when常见高级使用场景

CASE WHEN 表达式在 SQL 查询中有许多高级使用方式,下面列出了一些常见的高级用法:

1. 多条件判断:CASE WHEN 表达式可以根据多个条件进行判断。可以使用多个 WHEN 子句来定义不同的条件,并在 ELSE 子句中提供默认值。例如:

SELECT column,
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
  END AS alias
FROM table;

2. 嵌套 CASE WHEN:CASE WHEN 表达式可以嵌套在其他 CASE WHEN 表达式内部,形成更复杂的逻辑判断。例如:

SELECT column,
  CASE
    WHEN condition1 THEN
      CASE
        WHEN nested_condition1 THEN nested_result1
        WHEN nested_condition2 THEN nested_result2
        ...
        ELSE nested_default_result
      END
    WHEN condition2 THEN result2
    ...
    ELSE default_result
  END AS alias
FROM table;

3. 使用聚合函数: CASE WHEN 表达式可以与聚合函数结合使用,根据条件对聚合结果进行分组或筛选。例如:

SELECT column,
  SUM(CASE WHEN condition THEN value END) AS sum_condition
FROM table
GROUP BY column;

4. 范围判断: CASE WHEN 表达式可以进行范围判断,而不仅仅是等值判断。例如:

SELECT column,
  CASE
    WHEN value BETWEEN min_value AND max_value THEN result
    ELSE default_result
  END AS alias
FROM table;

(1)用case when 来计算男生人数 女生人数

SELECT 
  COUNT(CASE WHEN s_sex = '男' THEN 1 END) AS 男生人数,
  COUNT(CASE WHEN s_sex = '女' THEN 1 END) AS 女生人数
FROM student;

这个查询使用了两个 CASE WHEN 子句,分别计算出符合条件的男生人数和女生人数。COUNT 函数只统计非空值,因此当条件满足时,返回 1,否则返回 NULL。

(2)假设有一个名为 "orders" 的表,其中包含字段 "order_id"(订单ID)和 "order_amount"(订单金额)。计算不同金额范围的订单数量。使用 CASE WHEN 和 COUNT 聚合函数来实现:

SELECT 
  CASE 
    WHEN order_amount < 1000 THEN '小额订单'
    WHEN order_amount >= 1000 AND order_amount < 5000 THEN '中额订单'
    ELSE '大额订单'
  END AS 订单类型,
  COUNT(*) AS 订单数量
FROM orders
GROUP BY 
  CASE 
    WHEN order_amount < 1000 THEN '小额订单'
    WHEN order_amount >= 1000 AND order_amount < 5000 THEN '中额订单'
    ELSE '大额订单'
  END;

在这个查询中,使用 CASE WHEN 表达式根据订单金额将订单分为不同的类型,并在 CASE WHEN 中给出每个类型的名称。然后,使用 COUNT(*) 聚合函数对每个类型的订单数量进行计数。

注意,在 GROUP BY 子句中,再次使用相同的 CASE WHEN 表达式,以确保按订单类型进行正确的分组。

最终,查询结果将包括两列:订单类型和订单数量,显示不同类型的订单数量统计。

(3)用case when求季度

select  hire_date,case when to_char(hire_date,'mm') in( 1, 2,3)then 1
                  when to_char(hire_date,'mm') in( 4,5,6)then 2
                  when to_char(hire_date,'mm') in( 7,8,9)then 3
                  when to_char(hire_date,'mm') in( 10,11,12)then 4
                  end  "季度"
from employees;

最有技术含量的求季度方式(通用版)

select hire_date,trunc((to_char(hire_date,'mm')+2)/3)
from employees;

最简单的求季度方法

select  to_char(hire_date,'q')
from employees;

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值