Oracle:case when

本文介绍了如何在Oracle SQL中利用CASE WHEN语句结合COUNT和SUM函数进行条件统计,包括总记录数、特定条件下的记录数,以及条件下的非重复记录数。通过示例展示了在统计分析中这些技巧的实用价值。

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

1、我们知道,SQL语句中用count函数统计记录数量,配合distinct关键字可以统计非重复的记录数量。例如:

select count(*), count(city_name), count(distinct city_name) from tb_county 
  • 1

查询结果是:

count(*) count(city_name) count(distinct city_name)
2534 2534 363

增加查询条件可以查询不同条件下记录的数量,例如:

select count(*), count(city_name), count(distinct city_name)
  from tb_county 
 where xs_code like '23%'
    or xs_code like '24%'
  • 1
  • 2
  • 3
  • 4

查询结果是:

count(*) count(city_name) count(distinct city_name)
85 85 16

2、如果我们需要统计总记录数量和某种条件下的数量,可以用&n

<think>我们在Oracle数据库中使用CASE WHEN语句,它类似于其他编程语言中的if-else逻辑,用于在SQL查询中根据条件返回不同的值。 有两种主要形式: 1. 简单CASE表达式:将一个表达式与一组简单表达式进行比较以确定结果。 2. 搜索CASE表达式:计算一组布尔表达式以确定结果。 简单CASE语法: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE result_else END 搜索CASE语法(更灵活,可以包含不同的条件): CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result_else END 注意:ELSE子句是可选的,如果省略且没有条件满足,则返回NULL。 下面通过示例来说明。</think>在 Oracle 数据库中,`CASE WHEN` 是条件表达式,用于在 SQL 查询中实现逻辑分支。它有两种形式:**简单 CASE** 和 **搜索 CASE**。以下是详细说明和代码示例: --- ### 1. **简单 CASE 表达式** 比较单一表达式与多个值,语法如下: ```sql CASE 表达式 WHEN 值1 THEN 结果1 WHEN 值2 THEN 结果2 ... ELSE 默认结果 END ``` **示例**:根据部门编号返回部门名称 ```sql SELECT employee_id, department_id, CASE department_id WHEN 10 THEN '财务部' WHEN 20 THEN '技术部' WHEN 30 THEN '销售部' ELSE '其他部门' END AS dept_name FROM employees; ``` --- ### 2. **搜索 CASE 表达式** 支持更复杂的条件(可使用 `>`、`<`、`BETWEEN` 等),语法如下: ```sql CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... ELSE 默认结果 END ``` **示例**:根据薪水划分等级 ```sql SELECT employee_name, salary, CASE WHEN salary > 10000 THEN '高薪' WHEN salary BETWEEN 5000 AND 10000 THEN '中薪' WHEN salary < 5000 THEN '低薪' ELSE '未定义' END AS salary_level FROM employees; ``` --- ### 3. **在聚合函数中使用 CASE** 统计不同薪资范围的人数: ```sql SELECT COUNT(CASE WHEN salary > 10000 THEN 1 END) AS high_salary_count, COUNT(CASE WHEN salary BETWEEN 5000 AND 10000 THEN 1 END) AS mid_salary_count, COUNT(CASE WHEN salary < 5000 THEN 1 END) AS low_salary_count FROM employees; ``` --- ### 4. **在 UPDATE 语句中使用 CASE** 根据条件更新数据: ```sql UPDATE employees SET bonus = CASE WHEN salary > 10000 THEN salary * 0.15 WHEN salary > 5000 THEN salary * 0.10 ELSE salary * 0.05 END; ``` --- ### 关键注意事项: 1. **执行顺序**:按 `WHEN` 顺序匹配,第一个满足条件即返回结果。 2. **ELSE 子句**:可选,若省略且无匹配,返回 `NULL`。 3. **类型兼容**:所有 `THEN` 结果的数据类型必须一致(或可隐式转换)。 4. **性能**:复杂逻辑可能影响查询效率,建议先过滤数据再应用 `CASE`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值