SQL Server Group by及having的用法

GROUPBY 就是群組,群組可以再群組
HAVING就是條件,不過是下在GROUPBY之後


USE 中文北風
GO
--------------------------------------------------
SELECT 稱呼
 ,COUNT(員工編號) AS 人數
 ,SUM(薪資) AS 薪資總和
 ,AVG(薪資) AS 平均薪資
 ,MAX(薪資) AS 最高薪資
 ,MIN(薪資) AS 最低薪資
FROM 員工
GROUP BY 稱呼

--------------------------------------------------
--GROUP BY可以在群組再次群組
--COUNT 可以配*,其他彙總函數不行
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
WHERE 稱呼='小姐'
GROUP BY 稱呼,職稱

--------------------------------------------------
--列所有職稱,計算有女的總合
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
WHERE 稱呼='小姐'
GROUP BY ALL 稱呼,職稱
--ALL 所有資料都算出來,SQLSERVER專用
--以下是正統寫法

SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
WHERE 稱呼='小姐'
GROUP BY 稱呼,職稱
UNION ALL
SELECT 稱呼,職稱,0 AS 人數
FROM 員工
WHERE 稱呼!='小姐'
GROUP BY 稱呼,職稱
ORDER BY 職稱

--說明
--1.第1表找出是小姐的職稱人數總合
--2.第1表找出不是小姐的職稱人數總合
--3.將2個表結合
--3.並依職稱排序

--------------------------------------------------
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
GROUP BY 稱呼,職稱 WITH CUBE
--WITH CUBE是特有寫法,指多面(維度)來統計
--SQL2006--結果同上
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
GROUP BY CUBE(稱呼,職稱)

--------------------------------------------------
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
GROUP BY 稱呼,職稱 WITH ROLLUP
--WITH ROLLUP是挑第1個GROUP BY欄位統計
--SQL2006--結果同上
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
GROUP BY ROLLUP(稱呼,職稱)

--------------------------------------------------
SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
GROUP BY GROUPING SETS((稱呼,職稱),(稱呼),())
--GROUP BY GROUPING SETS((稱呼,職稱),(職稱),())
--GROUPING SETS((欄1,欄2),(想GROUP的欄),(//總))
--GROUPING SETS是自已組想組的GROUP

SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
GROUP BY 稱呼,職稱
UNION ALL 
SELECT NULL,NULL,COUNT(*) AS 人數 FROM 員工
--用UNION結合,硬幹法
--------------------------------------------------

SELECT 稱呼,職稱,COUNT(*) AS 人數
FROM 員工
WHERE 稱呼='小姐'
GROUP BY 稱呼,職稱
HAVING COUNT(*)>3
--在GROUP BY後要找的條件,跟WHERE一模一樣
--------------------------------------------------

留言

熱門文章