建表 插入數據
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.數學分數