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一模一樣
--------------------------------------------------
留言
張貼留言