I
分組
DB
通用數據庫具有基於表的特定列對數據進行分析的能力
可按照在 GROUP BY 子句中定義的組對行進行分組
以其最簡單的形式
組由稱為分組列的列組成
SELECT 子句中的列名必須為分組列或列函數
列函數對於 GROUP BY 子句定義的每個組各返回一個結果
下列示例產生一個列出每個部門編號的最高薪水的結果
SELECT DEPT
MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
此語句產生下列結果
注意
計算的是每個部門(由 GROUP BY 子句定義的組)而不是整個公司的 MAX(SALARY)
II
將 WHERE 子句與 GROUP BY 子句一起使用
分組查詢可以在形成組和計算列函數之前具有消除非限定行的標准 WHERE 子句
必須在GROUP BY 子句之前指定 WHERE 子句
例如
SELECT WORKDEPT
EDLEVEL
MAX(SALARY) AS MAXIMUM
FROM EMPLOYEE
WHERE HIREDATE >
GROUP BY WORKDEPT
EDLEVEL
ORDER BY WORKDEPT
EDLEVEL
結果為
educity
cn/img_
/
/
/
jpg >
注意
在 SELECT 語句中指定的每個列名也在 GROUP BY 子句中提到
未在這兩個地方提到的列名將產生錯誤
GROUP BY 子句對 WORKDEPT 和 EDLEVEL 的每個唯一組合各返回一行
III
在 GROUP BY 子句之後使用 HAVING 子句
可應用限定條件進行分組
以便系統僅對滿足條件的組返回結果
為此
在GROUP BY 子句後面包含一個 HAVING 子句
HAVING 子句可包含一個或多個用 AND 和 OR 連接的謂詞
每個謂詞將組特性(如 AVG(SALARY))與下列之一進行比較
該組的另一個特性
例如
HAVING AVG(SALARY) >
* MIN(SALARY)
常數
例如
HAVING AVG(SALARY) >
例如
下列查詢尋找雇員數超過
的部門的最高和最低薪水
SELECT WORKDEPT
MAX(SALARY) AS MAXIMUM
MIN(SALARY) AS MINIMUM
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING COUNT(*) >
ORDER BY WORKDEPT
此語句產生下列結果
educity
cn/img_
/
/
/
jpg >
有可能(雖然很少見)查詢有 HAVING 子句但沒有 GROUP BY 子句
在此情況下
DB
將整個表看作一個組
因為該表被看作是單個組
所以最多可以有一個結果行
如果 HAVING 條件對整個表為真
則返回選擇的結果(該結果必須整個由列函數組成)
否則不返回任何行
From:http://tw.wingwit.com/Article/program/SQLServer/201311/11239.html