這幾道SQL題能做對,你就穩(wěn)了

題目解析 | 愛數(shù)據(jù)助教內(nèi)容
來源 |?愛數(shù)據(jù)學(xué)院10月SQL月考題
01?第一題
寫出下面語句的實(shí)際執(zhí)行順序

解題思路
SQL子句邏輯執(zhí)行順序:
From → Where ?→ Group by → Having → Select → Distinct → Union → Order by
02?第二題
表名:student,用sql查詢出“張”姓學(xué)生中平均成績大于75分的學(xué)生信息;

解題思路

03?第三題
用一條SQL語句查詢xuesheng表每門課大于80分的學(xué)生

如果不考慮少錄入情況(比如張三只有2個(gè)課程,王五有3個(gè)課程)
如果考慮學(xué)生的課程數(shù)大于等于3的情況
解題思路

04?第四題
不同城市、不同性別,2019年支付金額最高的 TOP 10用戶(使用user_info 用戶信息表;user_order 用戶訂單表)

解題思路
Step1:在訂單信息表中,每一個(gè)用戶可以重復(fù)下單,所以在這里可以先得到每一個(gè)用戶在2019年的總支付金額;

Step2:接著通過公共字段 user_id將用戶訂單表和用戶信息表進(jìn)行關(guān)聯(lián),獲得包含城市、性別的寬表,然后再通過窗口函數(shù)row_number對不同城市,不同性別的用戶進(jìn)行排名標(biāo)記;
SELECT???a.user_name,
?????????b.city,
?????????b.sex,
?????????a.pay_amount,
?????????row_number()?over(partition?by?b.city,b.sex?order?by?a.pay_amount?desc)?rank
FROM(SELECT??user_id
?????????????,sum(pay_amount)?pay_amount
??????FROM?user_order???
??????WHERE?year(dt)=2019
??????GROUP?BY?user_id)a
LEFT?JOIN?user_info?b?on?a.user_id?=?b.user_id
Step3:最后通過嵌套一個(gè)子查詢,使用where子句作為篩選條件,篩選出Top10的用戶即可;
--?4.每個(gè)城市、不同性別,2019年支付金額最高的TOP10用戶?--
SELECT??c.user_name,
????????c.city,
????????c.sex,
????????c.pay_amount,
????????c.rank
FROM(SELECT???a.user_name,
??????????????b.city,
??????????????b.sex,
??????????????a.pay_amount,
??????????????row_number()?over(partition?by?b.city,b.sex?order?by?a.pay_amount?desc)?rank
??????FROM
??????(SELECT??user_id
???????????????,sum(pay_amount)?pay_amount
??????FROM?user_order???
??????WHERE?year(dt)=2019
??????GROUP?BY?user_id)a
??????LEFT?JOIN?user_info?b?on?a.user_id?=?b.user_id)c
WHERE?c.rank<=10;
-?END -
本文為愛數(shù)據(jù)學(xué)院SQL月考試題解析
版權(quán)歸愛數(shù)據(jù)學(xué)院所有,轉(zhuǎn)載請聯(lián)系后臺
