SQL語言是每個開發人員必備的一種技能,本文對面試過程中常見的SQL面試題進行分類、匯總,每類題型包括一些例題,希望大家能夠舉一反三。
01
Case When 是什麼?
Mysql資料庫中CASE WHEN語句,是用於計算條件列表並返回多個可能結果表達式之一。
case
when sex = '1' then '男'
when sex = '2' then '女'
else '未知'
end
注意:
(1) 在CASE函數中,else部分的默認值是NULL。
(2) CASE函數隻返回第一個符合條件的值,剩下的CASE部分被自動忽略。
02
面試題
1. 有一個學生表:students(id, name ,birthday, sex, grade),要求按每個年級統計男生和女生的數量各是多少,統計結果的表頭為:年級,男生數量,女生數量。
SELECT grade,
COUNT (CASE WHEN sex = 1 THEN 1
ELSE NULL
END) 男生數,
COUNT (CASE WHEN sex = 2 THEN 1
ELSE NULL
END) 女生數
FROM students
GROUP BY grade;
2. 有一個表table1(A,B,C),用SQL語句選出兩個列,第一列是A、B兩列的較大者,第二列是B、C兩列的較小者。
SELECT
(CASE WHEN a>b THEN a ELSE b END),
(CASE WHEN b>c THEN b ELSE c END)
FROM table1
3. 有一張表table2(語文成績、數學成績、英語成績),請用一條sql語句按以下顯示條件得出結果:
顯示條件:大於或等於80顯示為優秀,大於或等於60表示及格,小於60分表示不及格。
顯示格式:
語文 數學 英語
及格 優秀 不及格
select
(case when 語文>=80 then '優秀'
when 語文>=60 then '及格'
else '不及格') as 語文,
(case when 數學>=80 then '優秀'
when 數學>=60 then '及格'
else '不及格') as 數學,
(case when 英語>=80 then '優秀'
when 英語>=60 then '及格'
else '不及格') as 英語,
from table
4. 有如下人口統計數據,要求按照國家和性別進行分組,得出結果如下:
SELECT country,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END),
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END)
FROM Table_A GROUP BY country;
03
Case When 總結
1. 與GROUP BY 結合,自定義列聯表統計
# 統計每個國家的男女人口數量
SELECT country,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END),
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END)
FROM Table_A
GROUP BY country;
2. 與Group by結合,自定義分組統計
# 統計每個國家的男女人口數量
SELECT country,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END),
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END)
FROM Table_A
GROUP BY country;
3. 與distinct結合,去重分組統計
# 統計每個類型的數量
select
count(distinct case when type='1' then id else null end )type1_count,
count(distinct case when type='2' then id else null end )type2_count
from movies
4. 根據條件有選擇的UPDATE
# 根據現有工資更新工資:
UPDATE Personnel
SET salary =
CASE
WHEN salary >= 5000 THEN salary * 0.9
WHEN salary >= 2000 AND salary < 4600 THEN salary * 1.15
ELSE salary END;
推薦閱讀:
海量乾貨,持續發送