根據下面的例表編寫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子句中;