SQL Server T-SQL Count Distinct
2022-02-10
邁向資料科學家之路,活用 T-SQL Query 洞見資料、發掘價值。本次要介紹的是 Count Distinct 技巧 🙂
說明
如何從左邊的 Table 經由 Select 得到右邊 Table 的結果?將原本的資料,根據日期計算每日的不同人員數與訊息總數。
Do It Hard Way
使用 LEFT JOIN
加上 SubQuery
SELECT A.日期, A.人員數, B.訊息數
(
SELECT 日期, Count(*) 人員數
FROM 資料表
GROUP BY 日期
) A
LEFT JOIN
(
SELECT 日期, SUM(人數)
FROM
(
SELECT 日期, 1 人數
FROM 資料表
GROUP BY 日期, 人員
) C
GROUP BY C.日期
) B
ON A.日期 = B.日期
目前的 B Query 過於複雜,可以利用 Distinct
進行語法的精簡,但效能不會改變:
SELECT B.日期, B.SUM(人員)
FROM
(
SELECT DISTINCT 日期, 人員, 1 AS 人數
FROM 資料表
) B
GROUP BY B.日期
就在這時搔首困頓,並且一再的問自己真的只能這樣了嗎?最後是 StackOverFlow 輕輕地說你還有更好地選擇。
Count Distinct
SELECT COUNT(DISTINCT 人員), COUNT(*), 日期
FROM 資料表
GROUP BY 日期
不僅語法簡潔優雅,從 SQL Server Management Studio 的評估上效能更勝於 Sub Query 的查詢方式,帥耶 😎