Oracle之case when

文章介绍了SQL中的CASEWHEN语句,用于根据条件进行数据转换和统计。示例展示了如何用CASEWHEN来分别计算男生和女生的人数,以及按成绩区间统计各科得分人数,体现了CASEWHEN在数据分组和聚合操作中的灵活性。
部署运行你感兴趣的模型镜像

case when

1、语法

case
	when 条件表达式1 then value1
	when 条件表达式2 then value2
	...
	else 默认值
end

2、语义

如果表达式成立,那么整个语句值为表达式 then 后面的值,如果所有表达式都不成立,会取 else 后面的默认值,else 语句可以省略

select * from student;
-- 统计男、女生人数
select ssex, count(*) from student group by ssex;
-- 使用case when统计
select sum(case when ssex = '男' then 1 else 0 end) 男生人数,
       sum(case when ssex = '男' then 0 else 1 end) 女生人数
from student s;

-- 统计列印各科成绩,各分数段人数:课程id,课程名称,[100-85],(85-70],(70-60],[ <60]
select s.cno, c.cname,
       sum(case when s.score >= 85 and s.score <= 100 then 1 else 0 end) "[100-85]",
       sum(case when s.score >= 70 and s.score < 85 then 1 else 0 end)   "(85-70]",
       sum(case when s.score >= 60 and s.score < 70 then 1 else 0 end)   "(70-60]",
       sum(case when s.score < 60 then 1 else 0 end)                    "[ <60]"
from sc s join course c on s.cno = c.cno
group by s.cno, c.cname;

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### Oracle CASE WHEN 用法及示例 在Oracle数据库中,`CASE WHEN`语句是一种条件表达式,用于根据不同的条件执行不同的操作。它可以在`SELECT`、`UPDATE`、`DELETE`语句以及PL/SQL块中使用[^4]。 #### 基本语法 以下是`CASE WHEN`的基本语法: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END ``` - `conditionX`:需要评估的条件。 - `resultX`:当对应的条件为真(`TRUE`)时返回的结果。 - `ELSE`子句是可选的。如果所有`WHEN`条件都不满足,且未提供`ELSE`子句,则`CASE`表达式将返回`NULL`[^4]。 #### 示例:在`SELECT`语句中使用 以下是一个在`SELECT`语句中使用`CASE WHEN`的示例: ```sql SELECT employee_id, first_name, last_name, salary, CASE WHEN salary < 5000 THEN 'Low' WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium' WHEN salary > 10000 THEN 'High' ELSE 'Unknown' END AS salary_level FROM employees; ``` 此查询将根据员工的薪资水平将其分类为“Low”、“Medium”或“High”。如果薪资不符合任何条件,则返回“Unknown”[^4]。 #### 示例:在`UPDATE`语句中使用 以下是在`UPDATE`语句中使用`CASE WHEN`的示例: ```sql UPDATE employees SET salary = CASE WHEN department_id = 10 THEN salary * 1.1 WHEN department_id = 20 THEN salary * 1.15 ELSE salary * 1.10 END WHERE department_id IN (10, 20, 30); ``` 此更新语句根据部门ID调整员工的薪资。对于`department_id`为10的员工,薪资增加10%;对于`department_id`为20的员工,薪资增加15%;其他部门的员工薪资增加10%[^4]。 #### 示例:在PL/SQL块中使用 在PL/SQL块中使用`CASE WHEN`时,若省略`ELSE`子句且所有条件都不满足,可能会导致错误。例如: ```sql DECLARE v_salary NUMBER := 4000; v_salary_level VARCHAR2(10); BEGIN v_salary_level := CASE WHEN v_salary < 5000 THEN 'Low' WHEN v_salary BETWEEN 5000 AND 10000 THEN 'Medium' WHEN v_salary > 10000 THEN 'High' END; DBMS_OUTPUT.PUT_LINE('Salary Level: ' || v_salary_level); END; ``` 在此示例中,如果`v_salary`值不在任何指定范围内,`v_salary_level`将被设置为`NULL`[^3]。 #### 注意事项 - 在PL/SQL中,若省略`ELSE`子句且所有条件都不满足,则会报错`ORA-06592`[^3]。 - 在SQL查询中,若省略`ELSE`子句且所有条件都不满足,则返回`NULL`[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值