Home [SQL] Having:取代Where搭配聚合函數
Post
Cancel

[SQL] Having:取代Where搭配聚合函數

Having (取代Where搭配聚合函數)

Having 子句是用來取代 Where 搭配聚合函數 (aggregate function) 進行條件查詢,因為 Where 不能與聚合函數一起使用。

「聚合函數」指的也就是 AVG()COUNT()MAX()MIN()SUM() 等這些內建函數。

練習1: Join + Group By + Havving + Sum(), Order By

由販賣資料取得商品名稱別的販賣數量
要以販賣數量5個以上的商品為對象,並以商品名稱來排序顯示

1
2
3
4
5
6
7
8
9
--由販賣資料取得商品名稱別的販賣數量
--要以販賣數量5個以上的商品為對象,並以商品名稱來排序顯示

select B.商品名稱, sum(A.數量) 販賣數量
from [dbo].[販賣資料] A
join [dbo].[商品清單] B on B.商品ID = A.商品ID
group by B.商品名稱
having sum(A.數量) >= 5
order by B.商品名稱

Having 必須在 Group By之後。

練習2:2 Join + Group By + Having + Datepart + Sum()

請輸出單月的購買單價有500000以上的顧客的購買年份、月份,還有顧客名稱、購買單價合計。
這裡的購買單價合計是指:購買單價*數量

1
2
3
4
5
6
7
8
--請輸出單月的購買單價有500000以上的顧客的購買年份、月份,還有顧客名稱、購買單價合計。
--這裡的購買單價合計是指:購買單價*數量
select DATEPART(YYYY,[處理日]) 年份, DATEPART(MM,[處理日]) 月份, C.顧客名稱, sum(B.[販賣單價]*A.數量) 購買合計
from [販賣資料] A
join [商品清單] B on B.商品ID = A.商品ID
join [顧客清單] C on C.顧客ID = A.顧客ID
group by DATEPART(YYYY,[處理日]), DATEPART(MM,[處理日]),C.顧客名稱
having sum(B.[販賣單價]*A.數量) >= 500000

以月份為單位來統計販賣合計,並將統計出來的結果以Having來指定抓取資料的條件。

This post is licensed under CC BY 4.0 by the author.