30道經典SQL面試題講解(1-10)

2021-02-19 俊紅的數據分析之路

本篇節選自書籍《對比Excel,輕鬆學習SQL數據分析》一書,主要講解數據分析面試中常見的30道SQL面試題。

1 查詢每個班學生數

現在有一張全校學生信息表stu_table,這張表存儲了每位學生的id、name(姓名)、class(班級)、sex(性別)以及一些其他信息,現在我們想知道每個班有多少學生,該怎麼實現呢?

stu_table表如下所示:

idnameclasssex4張文華二班男3李思雨一班女1王小鳳一班女7李智瑞三班男6徐文杰二班男8徐雨秋三班男5張青雲二班女9孫皓然三班男10李春山三班男2劉詩迪一班女

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    class
    ,count(id) as stu_num
from
    demo.stu_table
group by
    class

解題思路:

我們是要獲取每個班的學生數,首先需要對班級進行分組,使用的是group by;然後再對每個組內的學生進行計數聚合運算,使用的count。最後運行結果如下:

2 查詢每個班男女學生數

還是前面的全校學生信息表stu_table,現在我們想知道每個班男生女生分別有多少個?

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    class
    ,sex
    ,count(id) as stu_num
from
    demo.stu_table
group by
    class
    ,sex

解題思路:

與第一題不同的是,不僅需要每個班級的信息,還需要每個班級裡面男女生分別的信息,主要考察的就是按照多列分組聚合的知識,直接在group by後面指明要分組的多列即可,且列與列之間用逗號分隔開。最後運行結果如下:

classsexstu_num二班男2一班女3三班男4二班女13 姓張的同學有多少個

還是前面的全校學生信息表stu_table,現在我們想知道這張表中姓張的同學有多少個?

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    count(id) as stu_num
from
    demo.stu_table
where name like "張%"

解題思路:

我們是要獲取姓張的同學有多少個,首先需要思考的是怎麼去判斷同學是否姓張,假設我們表裡面存儲的姓名都是先姓後名的形式,那就可以用到字符串匹配函數like;知道怎麼判斷同學是否姓張,接下來就是把這些同學篩選出來,使用的是where條件;最後針對篩選出來的同學進行計數,使用的是count。最後運行結果如下:

4 篩選出id第3-5的同學

還是前面的全校學生信息表stu_table,現在我們要獲取id從小到大排序以後第3-5位的同學的信息。

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    *
from
    demo.stu_table
order by id asc
limit 2,3

解題思路:

我們要獲取id從小到大排序以後第3-5位的同學,因為不確定id是否連續,所以我們沒法直接用where條件來篩選id。我們先對id進行升序排列,然後再利用limit進行篩選。最後運行結果如下:

idnameclasssex3李思雨一班女4張文華二班男5張青雲二班女5 篩選出掛科的同學

現在有一張學生成績表score_table,這張表存儲了每位學生的id、name(姓名)、class(班級)、score(成績),現在我們想要把掛科(成績小於60)的同學信息篩選出來。

score_table表如下所示:

idnameclassscore1王小鳳一班882劉詩迪一班703李思雨一班924張文華二班555張青雲二班776徐文杰二班777李智瑞三班568徐雨秋三班919孫皓然三班9310李春山三班57

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    *
from
    demo.score_table
where score < 60

解題思路:

我們要獲取掛科同學的信息,只需要加一個where條件用來限定掛科這個條件即可。最後運行結果如下:

idnameclassscore4張文華二班557李智瑞三班5610李春山三班576 篩選姓張的且掛科的同學

我們現在需要根據學生成績表score_table查找出姓張的且掛科的同學的信息。

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    *
from
    demo.score_table
where score < 60
    and name like "張%"

解題思路:

這裡面主要是用到了多條件篩選,多個條件之間用and進行關聯即可。最後運行結果如下:

7 查詢銷冠獲得次數

我們有一張表month_table記錄了每月的銷售冠軍信息,這張表存儲了每月銷冠的id、name(姓名)、month_num(月份),現在需要獲取銷冠次數超過2次的人以及其對應的做銷冠次數。

month_table表如下所示:

idnamemonth_numE002王小鳳1E001張文華2E003孫皓然3E001張文華4E002王小鳳5E001張文華6E004李智瑞7E002王小鳳8E003孫皓然9

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    id
    ,name
    ,count(month_num) num
from 
    demo.month_table
group by 
    id
    ,name
having 
    count(month_num) > 2

解題思路:

我們要獲取銷冠次數超過2次的人以及其對應的做銷冠次數,首先需要獲取每個人做銷冠的次數,對id進行group by,然後在組內對month_num進行計數即可;然後再對分組聚合後的結果利用having進行條件篩選。最後結果如下:

idnamenumE002王小鳳3E001張文華38 獲取每個部門一整年業績提升幅度

現在有一個月份銷售額記錄表sale_table,這個表記錄了每年每月的銷售額,現在我們想看下今年(2019年),月銷售額最高漲幅是多少?

sale_table表如下所示:

year_nummonth_numsales201912854201924772201933542201941336201953544201812293201822559201832597201842363

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
    max(sales) as max_sales
 ,min(sales) as min_sales
    ,max(sales)-min(sales) as cha
    ,(max(sales)-min(sales))/min(sales) as growth
from 
    demo.sale_table
where 
    year_num = 2019

解題思路:

我們要獲取今年的最大月漲幅,首先需要通過where條件把今年的每月數據銷售額篩選出來;然後再在今年的月銷售額裡面尋找最大和最小的銷售額,對兩者進行做差,就是我們想要的結果。最後運行結果如下:

max_salesmin_saleschagrowth4772133634362.57199 查找每科成績大於70的學生

我們有一張學生科目成績表score_info_table,這張表記錄了每一位同學每一科目的成績,每一位同學的每科成績是一行,現在我們想要通過這張表獲取到每科成績都大於70分的學生。

score_info_table表如下所示:

idnamesubjectscore1王小鳳語文882張文華數學703徐雨秋英語921王小鳳語文552張文華數學773徐雨秋英語771王小鳳語文722張文華數學913徐雨秋英語93

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select 
 id
    ,name
 from
    demo.score_info_table
 group by
    id
    ,name
 having 
    min(score) > 70    

解題思路:

我們是要獲取每科成績大於70的學生,只要能夠保證最小成績是大於70分的,就說明這位同學每科成績都大於70分.所以第一步就是先獲取每位同學的最小成績,先對name進行group by分組,再在組內求最小值,然後將最小成績大於70分的同學通過having篩選出來即可。最後運行結果如下:

10 刪除重複值

現在有一個學生信息表stu_info_table,這張表存儲了每位學生id、name(姓名)、class(班級)、grade(年級),現在我們想獲取這個學校所有年級以及所有班級的信息,即哪些年級有哪些班級,該怎麼獲取?

stu_info_table表如下所示:

idnameclassgrade1王小鳳一班一年級2劉詩迪一班二年級3李思雨一班一年級4張文華二班二年級5張青雲二班一年級6徐文杰二班二年級7李智瑞一班一年級8徐雨秋二班二年級9孫皓然一班一年級

自己先想一下代碼怎麼寫,然後再參考我的代碼。

select
    grade
    ,class
from
    demo.stu_info_table
group by 
    grade
    ,class
order by
    grade

解題思路:

stu_table表中id列是主鍵,即不重複的,但是class和grade是重複的,多個id會屬於同一個class和grade。我們只要class和grade信息,所以是需要對這兩列進行去重,去重我們除了用distinct以外,還可以用group by。最後運行結果如下:

gradeclass一年級一班一年級二班二年級一班二年級二班

想進一步了解更多內容的同學,可以點擊下方連結:

相關焦點

  • 30道經典SQL面試題講解(11-20)
    本篇節選自書籍《對比Excel,輕鬆學習SQL數據分析》一書,主要講解數據分析面試中常見的30道SQL面試題。1-10題見:30道經典SQL面試題講解(1-10)11 行列互換現在我們有下面這麼一個表row_col_table,這個表中每年每月的銷量是一行數據:year_nummonth_numsales2019110020192200201933002019440020201200202024002020360020204800
  • 50道SQL經典面試題(下)
    由於篇幅較長,上次已經給小夥伴們分享了25道面試題,還沒看的可以戳這裡:50道SQL經典面試題(上)今天繼續給小夥伴們補上剩下的25道。為便於閱讀理解,我們還是把表結構和測試數據給大家補上。同理學生表(Student)與成績表(SC)也是1:n的關係2、教師表Teacher的教師編號(Tid)作為主鍵,在課程表(Course)中可以帶一門或多門課程,兩表之間也是屬於1:n的關係。
  • sql子查詢面試題
    這是《從零學會sql》系列課程第4節課《複雜查詢》的練習題,也是常考常考的面試題。
  • mysql經典面試題(2019年整理)
    mysql經典面試題(2019年整理)MySQL資料庫開發規範MYSQL如何優化?>MySQL存儲引擎- MyISAM與InnoDB區別MySQL資料庫索引技巧與索引優化mysql經典面試題(2019年整理)mysql的sql語句優化方法面試題總結Mysql的引擎有哪些?
  • SQL經典面試50題 | 附答案
    今天給大家分享一份星友對SQL經典面試50題的刷題記錄,寶器稍作了一些修改,以下是星友自述正文:看完了SQL基礎教程,然後再看SQL進階教程感覺有些不是很懂,於是就開始刷題熟悉⼀下基礎知識,找了⽐較經典的很多⼈都刷過的SQL⾯試50題,B站也有挺好的視頻解答,看題先⾃⼰做,不會就看視頻解答,感覺難題都在前⾯。
  • 幾道常見的SQL面試題,看你能答對幾道?
    SQL面試題,在不看底部參考答案的情況下,看自己能做對幾道。1.用一條SQL 語句 查詢出每門課都大於80 分的學生姓名2.  刪除除了自動編號不同, 其他都相同的學生冗餘信息 3.一個叫 team 的表,裡面只有一個欄位name, 一共有4 條紀錄,分別是a,b,c,d, 對應四個球對,現在四個球對進行比賽,用一條sql
  • 做數據sql不熟練?解析50道經典面試題,sql從入門到進階
    給大家整理了流傳已久的50道sql面試經典題目,解題思路和SQL答案一併附上,難度循序漸進,考察點非常全面,自己刷完這些題目後基本可以應對大部分面試題目和工作場景。工作之餘也可以拿出來練練手,對知識點查缺補漏。
  • 這些SQL技能你都會嗎? 經典SQL面試題送給你(附答案)
    在面試數據分析工作時,資料庫是必考技能,與此同時SQL面試題也越來越難了,今天就給大家總結一些經典的SQL面試題。首先熟悉一下資料庫相關專業名詞, 比如DB、 DBMS和SQL,這些概念常常讓人傻傻分不清楚。資料庫(DataBase)是長期存儲在計算機內、有組織的、統一管理的相關數據的集合。
  • 手撕SQL | 必知必會5道SQL面試題
    愛數據曉輝 | 作者愛數據學院8月SQL月考題 | 來源附本次sql本次測試題:1.請根據各小題的需求,用代碼實現>1.>轉換成構建SQL語句、並得到分析結果的能力需要同學們熟記SQL子句的書寫順序和運行順序重點考察大家基本功,手撕sql的能力
  • 50道SQL經典面試題(上)
    最近在收集SQL每日一題時,找到這套比較經典的SQL面試題。我根據題目重新梳理了一遍,包括表結構,表之間的關係,測試數據,題目,參考答案等。其中大部分參考答案在各種資料庫平臺上通用。由於題目數量較多(足足50道題),小夥伴們可能不容易消化理解,於是將內容分為上下兩篇,希望對你有所幫助。
  • SparkSQL 50道練習題
    RDD[String] = sc.textFile("E:\\2020大數據新學年\\BigData\\05-Spark\\0417\\4.16號練習題50道2.0\\data\\student.txt")   val rdd2: RDD[String] = sc.textFile("E:\\2020大數據新學年\\BigData\\05-Spark\\0417\\4.16號練習題50道2.0
  • 拼多多2020屆數據分析面試題合集
    一道sql:連續三天留存是否有sql語法正確但是很久跑不出來的情況?以剛剛這道題為例,如何優化sql運作效率?10作者:cilla0205 來源:牛客網1.sql 找近90.30.7天的登錄人數,不能用union2.如何判斷異常值,如果有大規模訂單湧入如何判斷是否是正常增長3.訂單業務場景,如何建立異常值示警體系
  • 小學數學:30道經典運用題解析+例題講解,涵蓋1-6年級全部考點!
    小學數學:30道經典運用題解析+例題講解,涵蓋1-6年級全部考點!數學的學習是從孩子進入小學就已經開始學習的科目,其實對於數學的學習應該是越早越好,學習數學能夠很好地提升孩子的邏輯思維能力,和大腦對空間的想像能力。
  • SQL面試必刷題(1) Case When
    SQL語言是每個開發人員必備的一種技能,本文對面試過程中常見的SQL面試題進行分類、匯總,每類題型包括一些例題,希望大家能夠舉一反三。
  • 幾個SQL在線刷題的網站
    [1]推薦指數:⭐⭐XUESQL(⭐⭐⭐)http://xuesql.cn/寫完SQL直接回車就是提交,如果正確會自動進入下一題。另外還有一個加分項,它有自己配套的B站視頻(同樣免費)。牛客網採用的是employees資料庫,共61道題。
  • 解析 BAT 大廠的經典面試題(中篇)
    分享給大家的是 「工具 模塊」- 解析BAT面試題(中篇)。很多人對 BAT 以及其他大廠,也是朝思暮想。也因為一些原因,暫時還未能加入。大廠中有很多經典面試題,直到現在也會用,不要問小編為什麼知道(保密)。
  • ​Golang面試題41道
    Golang面試題41道大家好,這一期呢,我們來說一下golang的面試題。
  • 大數據分析工程師面試集錦3-SQL/SparkSql/HiveQL
    下面兩張圖是SQL基礎概念和基礎語法的考題大綱圖,接下來圍繞圖中提到的概念來列舉幾個常見面試題。圖1 基礎概念圖2 基礎語法考題模擬題1:你覺得SQL是一種什麼樣的語言,說說你對它的認識。CONCAT(prod_name,' ',prod_price)題9:將產品價格按照1-10元,11-100元,100元以上分為三組,進行分組統計記錄數。
  • 10道經典面試題!聊一聊「面試」的那些事
    編輯導語:每次面試都是一種成長,與不同的人溝通也是一種學習;特別是面試,針對不同的公司和崗位,對應的問題都是有針對性,更加考驗我們的思考能力和應變能力;本文作者分享了十道經典的面試題並進行解析,我們一起來看一下。
  • 九章算法班 | 秋招改版,2019最新面試題講解
    ➤➤ IT求職必修90%以上的人都會選修《九章算法班》,即使是已經刷題幾百道的人,也常常在這門課中感受到「醍醐灌頂」。原因很簡單,主講老師刷過的題,超過2000道,所總結的「套路」和「模板」不是刷幾百道的人可以得出的。