iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
自我挑戰組

C# 和 SQL 探索之路系列 第 26

Day 26: SQL Having 語法與列出重複資料

  • 分享至 

  • xImage
  •  

今天介紹 SQL 的 HAVING 函數和 WHERE 的差異,還有用 HAVING 搭配 COUNT 找出重複的資料。

HAVING 介紹

有使用聚合函數 (例如 SUM) 計算時,假如想要對計算結果做進一步的篩選,這時不能夠使用 WHERE 查詢,而要使用 HAVING

以計算員工所持有物品的價格為例:

INSERT INTO ItemValue (EmployeeID, ItemName, ItemMoney)
VALUES ('A001', '文具組', 500), ('A001', '白板', 1100), ('B001', '掃地用具', 500), ('B002', '印表機', 2000), ('B003', '資料夾', 100)
  • 錯誤的例子
SELECT EmployeeID, SUM(ItemMoney)
FROM ItemValue
GROUP BY EmployeeID
WHERE SUM(ItemMoney) > 1500
  • 正確的例子
SELECT EmployeeID, SUM(ItemMoney)
FROM ItemValue
GROUP BY EmployeeID
HAVING SUM(ItemMoney) > 1500

查詢結果為

EmployeeID TotalMoney
A001 1600
B002 2000

HAVING 通常放在查詢語法的最後方。

WHERE 可用在一般非聚合函數的條件查詢,例如:

SELECT EmployeeID, ItemMoney
FROM ItemValue
WHERE EmployeeID = 'A001'

列出重複資料

假如今天在插入資料時,意外地插入重複資料,需要找出哪些重複時,該怎麼辦呢?

INSERT INTO EmployeeTable (EmployeeID, Department)
VALUES ('A001', 'HR'), ('A002', 'HR'), ('B001', 'IT'), ('B002', 'IT'), ('A001', 'HR')

可以用以下語法,以 COUNT 找出人員 ID、部門的重複次數,再透過 HAVING 列出重複次數大於 1 的資料。

SELECT EmployeeID, Department
FROM EmployeeTable
GROUP BY EmployeeID, Department
HAVING COUNT(*) > 1

結果會列出:

EmployeeID Department
A001 HR

參考資料


上一篇
Day 25: SQL 與 C# 的四捨五入
下一篇
Day 27: SQL 語法: FOR XML PATH
系列文
C# 和 SQL 探索之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言