case when 相当于 java 语言中的 if {} esle {} 判断、switch case 语句。该语句执行时,先对条件进行判断,然后根据判断结果进行响应的 *** 作。
Case 有两种格式:简单Case函数 和 Case搜索函数
简单Case 函数:
CASE num
WHEN '1' THEN '小学生'
WHEN '2' THEN '中学生'
WHEN '3' THEN '高中生'
WHEN '4' THEN '大学生'
ELSE ‘未知错误’ END
Case 搜索函数:
CASE
WHEN num = '1' THEN '小学生'
WHEN num = '2' THEN '中学生'
WHEN num = '3' THEN '高中生'
WHEN num = '4' THEN '大学生'
ELSE ‘未知错误’ END
THEN 后边的值应与ELSE的值类型相同,否则会报错,如下:
CASE SCORE WHEN '1' THEN '小学生' ELSE 0 END
'优'和0数据类型不一致则报错:
[Err] ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER
二、示例老师要统计班中有多少男生,多少女生,及格的男生有多少,及格的女生有多少
表结构如下:其中STU_SEX字段,0表示男生,1表示女生。
STU_ID | STU_NAME | STU_SEX | STU_SCORE |
1 | a | 0 | 88 |
2 | b | 0 | 55 |
3 | c | 0 | 45 |
4 | d | 1 | 66 |
5 | e | 1 | 77 |
6 | f | 1 | 88 |
查询语句如下:
SELECT
SUM (CASE WHEN STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT,
SUM (CASE WHEN STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,
SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_PASS,
SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_PASS
FROM
THTF_STUDENTS
输出:
MALE_COUNT | FEMALE_COUNT | MALE_PASS | FEMALE_PASS |
3 | 3 | 1 | 3 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)