4道SQL題 | 快速入門數據分析師面試

根據下面的例表編寫SQL查詢語句:

表名:order
在這裏插入圖片描述
表名:product
在這裏插入圖片描述
表名:store
在這裏插入圖片描述

1.查找符合下列要求的產品,並按照產品價格降序排列:CategoryA 且顏色爲yellow,或者Weight大於5;

參考代碼:

select * 
from product
where Category = 'CategoryA' 
		and (Color = 'Yellow' OR weight > 5)
order by Price	

2.請計算每一位客人的總購買金額(Amount),總購買訂單數,總購買產品件數(Quantity),同一個客人同一天的訂單算作一單,並篩選出總購買金額大於等於800的客人,按金額降序排列;

參考代碼:

SELECT  NAME
       ,sum(amount) as sum_amt
	   ,count(DISTINCT orderdate) as sum_order
	   ,sum(quantity) as 總商品數
FROM `order`
GROUP BY NAME
having sum(amount) >= 800
order by sum_amt DESC;

3.請查找每個城市(City)購買金額排名第二的客人,列出其購買城市,姓名,和購買金額;

參考代碼:

SELECT *
FROM 
(
SELECT   city
       ,`NAME`
       ,sum(amount) as amt_total
	   ,row_number()over(PARTITION by city order by sum(amount) desc) as ranking
FROM `order` as a
inner join store as b ON a.store = b.store 
GROUP BY city,`NAME`) t
WHERE ranking = 2; 

4.購買過ProductA 購買過 ProductB的顧客人數;

參考代碼:

法一:藉助count

SELECT count(*) as cust_num
FROM (SELECT  Name
			 ,count(DISTINCT product) as scount
			from `order` 
	 WHERE product = 'ProductA' or product = 'ProductB'
	 group by Name
	 having scount > 1) t

法二:嵌套子查詢

select name from `order` 
where product = 'ProductA' 
      and name in (select name from `order` 
		                  where product = 'ProductB');		                             													

法三:藉助 join

SELECT a.name 
from 
	(select name from `order` where product = 'ProductA') a
inner join 
    (select name from `order` where product = 'ProductB') b
on a.name = b.name;

方法4:藉助"in"

select distinct  name from `order` 
where `name`in(SELECT DISTINCT name
					from `order` where product = 'ProductA')
			and`name`in(select name 
					from `order` where product = 'ProductB');

測試4常見錯誤:

錯例①:“in” 爲邏輯"或"的關係

# 形式①
(select `name` from `order` 
where product = 'ProductA'
or product = 'ProductB') 

# 形式②
select `name` from `order` 
where product in ('ProductA','ProductB')

錯例②:使用 in 和 union不能夠實現需求

select name from product 
where name in (select name from product where product = "productA"
				union select name from product where product = "productB"  )

【本次考點】
1)考察知識點:join、having、子查詢、聚合分組、窗口函數、條件篩選等語句的掌握以及sql技能綜合運用的能力;
2)考察同學們的審題是否細緻、考查理解業務的能力。
3)將業務需求轉換成構建SQL語句、並得到分析結果的能力。
4)需要同學們熟記SQL子句的書寫順序和運行順序。
5)考察對having語句的掌握,很多人會把聚合函數寫到where子句中;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章