SQL中case when的用法

建表 插入数据
CREATE TABLE course ( id INT ( 20 ), sid INT ( 20 ), course VARCHAR ( 255 ), score INT ( 20 ) );

INSERT INTO `course` VALUES (1, 1, '语文', 43);
INSERT INTO `course` VALUES (2, 1, '数学', 55);
INSERT INTO `course` VALUES (3, 2, '语文', 77);
INSERT INTO `course` VALUES (4, 2, '数学', 88);
INSERT INTO `course` VALUES (5, 3, '语文', 98);
INSERT INTO `course` VALUES (6, 3, '数学', 65);

一、case when then else end的用法
(1)基本用法
case    
    when 条件1 then 条件成立的内容
    when 条件2 then 条件成立执行的内容
    else 其他条件
end

(2)在update更新中使用
   UPDATE TABLE 
   SET 字段 1 =
			CASE
			    WHEN 条件 1 THEN 值 1 
			    WHEN 条件 2 THEN 值 2 ELSE 值 3 
			END 
	WHERE
	
(3)在select查询中使用
select 字段1, 字段2,       
        case 字段3     
            when 值1 then 新值       
            when 值2 then 新值      
        end as 重新命名字段3的名字       
from table      

(4)在where条件中使用
    select 字段1,字段2,字段3      
    from table
    where
        case
            when 条件1 then where后的条件
            when 条件2 then where后的条件
            else where后想加的条件
        end
-- 举例说明:语文成绩找到及格的,数学成绩找出来不及格的,相当于找到偏科偏语文的学生的学生
select *       
from course
where 
        case 
            when course = '语文' then score>60
            when course = '数学' then course<60
        end
(5)在GROUP BY分组中使用
select 字段1,字段2,字段3      
from table
where 条件
group by 
    case
        when 条件1 then 字段x
        when 条件2 then 字段y
    end
 说明:满足条件1以字段x分组,满足条件2以字段y分组。

(6)在Order By排序中使用
select 字段1,字段2,字段3      
from table
where 条件
order by 
    case
        when 条件1 then 字段x
        when 条件2 then 字段y
    end
 说明:满足条件1以字段x排序,满足条件2以字段y排序。
 
-- 所有数学课程成绩 大于 语文课程成绩的学生的学号
-- 第1步、使用case when来进行行列转换
    select sid 学号,
			case 
				WHEN course='语文' then score else 0
			end as 语文分数,
			case 
				WHEN course='数学' then score else 0
			end as 数学分数
	from course

-- 第2步 根据学号进行合并,将同一个学生的数学和语文成绩放在一行显示
-- " case WHEN course='语文' then score else 0 end "是完整的case when语句
SELECT
	sid 学号,
	MAX( CASE WHEN course = '语文' THEN score ELSE 0 END ) 语文分数,
	MAX( CASE WHEN course = '数学' THEN score ELSE 0 END ) 数学分数 
FROM
	course 
GROUP BY
	sid

-- 第3步 从行列转换的表中取出题目中要求的数据
SELECT a.* from 
(
SELECT
	sid 学号,
	MAX( CASE WHEN course = '语文' THEN score ELSE 0 END ) 语文分数,
	MAX( CASE WHEN course = '数学' THEN score ELSE 0 END ) 数学分数 
FROM
	course 
GROUP BY
	sid
) as a
WHERE a.语文分数<a.数学分数

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章