將數值分數轉換為等級標籤(優秀/及格/不及格),CASE WHEN 是標準 SQL 做法,跨資料庫通用。
CREATE TABLE result (
stu_id VARCHAR(20) NOT NULL,
china DECIMAL(5,2),
math DECIMAL(5,2),
english DECIMAL(5,2)
);
INSERT INTO result VALUES ('0001', 60, 20, 80);
INSERT INTO result VALUES ('0002', 80, 60, 80);
INSERT INTO result VALUES ('0003', 20, 85, 80);
SELECT
stu_id,
CASE
WHEN china > 80 THEN '優秀'
WHEN china >= 60 THEN '及格'
ELSE '不及格'
END AS 語文,
CASE
WHEN math > 80 THEN '優秀'
WHEN math >= 60 THEN '及格'
ELSE '不及格'
END AS 數學,
CASE
WHEN english > 80 THEN '優秀'
WHEN english >= 60 THEN '及格'
ELSE '不及格'
END AS 英語
FROM result;
| stu_id | 語文 | 數學 | 英語 |
|---|---|---|---|
| 0001 | 及格 | 不及格 | 優秀 |
| 0002 | 優秀 | 及格 | 優秀 |
| 0003 | 不及格 | 優秀 | 優秀 |
CASE col WHEN val1 THEN ... WHEN val2 THEN ... ELSE ... END 適用等值判斷THEN/ELSE 中嵌套另一個 CASESUM(CASE WHEN condition THEN 1 ELSE 0 END) 實現條件計數WHEN col IS NULL THEN ... 需顯式判斷,col = NULL 永遠為 UNKNOWNDECODE 兼容舊版