SQL面試必刷題(1) Case When

2021-03-02 算法研習社

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;

推薦閱讀: 

海量乾貨,持續發送

     

相關焦點

  • SQL必備:case when函數與窗口函數
    例如牛客網SQL76:寫一個sql語句查詢各個崗位分數的中位數位置上的所有grade信息,並且按id升序排序。這裡涉及到了中位數的信息,用窗口函數會很方便。其實SQL75題就是要輸出各個崗位中位數的位置範圍,比方說有兩個數,那中位數是兩個數的平均,所以中位數的位置範圍為[1,2],而如果是三個數,中位數只需要知道第二個數的信息,所以中位數範圍為[2,2],所以做過75題之後,這道題最直接的寫法就是:select t1.id, t1.job, t1.score, t1.rank0from     (select
  • 複雜sql處理邏輯 case when的用法
    [CDATA[ case when b.plan_type='2' and DATEADD(DAY,1,b.endtime) > GETDATE() and GETDATE() > b.starttime then 1 when (b.plan_type is null or b.plan_type='1') and DATEADD(DAY,1,b.endtime)
  • 關於SQL裡面兩個case when then的應用案例
    ');查詢的結果如下:name   subject score 張三    語文  80張三    數學  98張三    英語  65李四    語文  70李四    數學  80李四    英語  90(例子一)行轉列:sql
  • SQL語句條件判斷之case when基本用法
    本文將介紹SQL條件判斷關鍵字case when的基本用法基本語法case x when y then z else m end乍一看看不懂沒關係,我們把它拆分開解釋case x 意思就是設置一個參數,x可以是一個資料庫欄位,也可以是一個dao層傳遞的參數,也可以是一個固定值when y 意思就是給設定的x參數設置條件
  • SQL中的條件判斷函數CASE WHEN,和IF的用法
    例4: 有分數degree,degree>90則返回優秀,degree>70 and <90則返回中等,degree>60 and <70則返回及格代碼如下:select sno,cno,degree,(case when degree>=90 then '優秀'when degree&
  • 幾個SQL在線刷題的網站
    [1]推薦指數:⭐⭐XUESQL(⭐⭐⭐)http://xuesql.cn/推薦指數:⭐⭐⭐上面介紹了兩個邊學習邊練習測試的網站,下面再介紹專門刷題的網站吧!牛客網作為大家一直推薦的SQL刷題網站做的還是很不錯的,既可以檢查SQL基礎語法的掌握,又可以及時反饋結果是否正確。
  • 關於SQL Case When用法
    country when '中國' then '亞洲' when '印度' then '亞洲' when '日本' then '亞洲' when '美國' then '北美洲' when '加拿大' then '北美洲' when '墨西哥' then '北美洲' else '其他' end, sum(population
  • SQL之Case When用法詳解
    第一種 格式:簡單Case函數:格式說明 case 列名    when   條件值1   then  選擇項1    when   條件值2   then  選項2..    else   默認值   end舉例: select     case   score     when 'A' then '不及格'    when  'B' then '良好'    when  'C' then '優秀'    else '未參加考試' end
  • 分享4個SQL在線刷題網站
    分享4個SQL在線刷題網站。
  • SQL常見面試題目(多表聯查)
    和所有班中女生人數和女生的平均分答:select c.c_name,女生人數=sum(s.s_id),女生平均分=avg(s.score) from student  inner join student_class sc on s.s_id = sc.s_id  and inner join class c on sc.c_id = s.c_id where s.sex='女'二.一道SQL語句面試題
  • hiveSQL常見面試題
    小編前幾天去面試了一個大數據分析的崗位,學習了幾個月信心滿滿的小編被無情的面試教育了,被教育的不是一些高深的算法理論,而是一些hiveSQL。這些題小編真不是不會,場景都非常熟悉,但就是容易忘。今天小編整理了一點常用場景的hiveSQL,很可能就能在面試中幫到你。場景一:分組求TopN先看數據:
  • 鞏固SQL - 窗口函數&變量&數據透視圖
    但作為合格的一個數據分析師,sql的精通肯定是必不可少的,所以最近瘋狂刷sql題,同時也來總結下我以前比較少用的語法。4.4、其他類函數經典面試題4.4.1、查詢顧客上次的購買時間select *,lag(orderdate,1) over(partition by name1 order by orderdate
  • 小紅書面試題:如何分析用戶行為?
    前面說了,現在是用戶訂單表(表a)左聯結用戶收藏商品表(表b)可以判斷出,也就是保留左表用戶訂單表(表a)裡的全部數據。因此這樣的聯結結果裡的商品都來自左表用戶訂單表,所以這一列對應的沒有該用戶行為特徵(用0表示)。
  • 經典SQL面試題及答案分析
    when語法。SELECT a.c_id,b.c_name,MAX(score),MIN(score),ROUND(AVG(score),2), ROUND(100*(SUM(case when a.score>=60 then 1 else 0 end)/SUM(case when a.score then 1 else 0 end)),2) as 及格率, ROUND(100*(SUM(case
  • 如何學習SQL語言
    為了幫助剛畢業找工作,或者想轉行成為數據分析師工作的朋友,我會用下面內容教會你怎樣用最快速、最容易理解的方式學會資料庫和SQL,並使用SQL進行數據分析:1.入門2.簡單查詢3.匯總分析4.複雜查詢5.多表查詢6.求職面試題7.檢驗SQL的學習效果第1部分:入門學習以下內容:1)了解資料庫的基本概念
  • SQL筆試面試題之求解連續區間
    求解連續區間是數據分析筆試面試中常考的SQL題目,百曉生為各位小夥伴收集了一大波筆試面試題,祝各位拿到心儀的offer!編寫一個 SQL 查詢,查找所有至少連續出現三次的數字。一個@num用來儲存連續狀態select log_id, case when @id = log_id - 1 then @num := @num else @num := @num + 1 end num, @id := log_idfrom Logs,(select @num := 0,@id :=
  • 每周 · 面試題 | SQL面試必會50題(下)
    https://zhuanlan.zhihu.com/p/72223558或者直接找職場老師1對1解答哦!!查詢男生、女生人數解題思路:男女生人數這個毫無疑問考的是groupby 還有就是分組以後的count,或者可以使用case when知識點:groupby,或者 case when
  • sql子查詢面試題
    這是《從零學會sql》系列課程第4節課《複雜查詢》的練習題,也是常考常考的面試題。
  • Leetcode刷題招工面試經驗整理(1)
    刷題就是啃硬骨頭,不會的題想一天也要想出來!vs 刷題就是背題,把題目背下來有一天自然會懂!針對這三大誤區,我有如下心得:1. 刷題是以「數據結構和算法」相關知識為基礎的我看過很多地裡的「刷題心得」,鼓吹勤奮至上論,號召一切找工作的人每天刷三題,堅持下去就有offer。我相信過,但實踐效果很差。仔細思考之後,我認為是一種典型的不科學學習法。
  • 手撕SQL | 必知必會5道SQL面試題
    愛數據曉輝 | 作者愛數據學院8月SQL月考題 | 來源附本次sql本次測試題:1.請根據各小題的需求,用代碼實現>1.>轉換成構建SQL語句、並得到分析結果的能力需要同學們熟記SQL子句的書寫順序和運行順序重點考察大家基本功,手撕sql的能力