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.數學分數

 

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