sql中如果要分組查詢,一般都會使用到group by語句,如何熟練使用group by語句呢,我分以下幾點進行總結。
- Group by與聚合函數
- Group by與Having
- 需要注意的地方
Group by與聚合函數
group by一般與聚合函數一起使用。這是因為group by之后結果集就變成了多個分組,而每個分組可能包含多條記錄,要想針對每個分組進行操作,所以必須使用可以作用在多條記錄上的聚合函數。比如,下面的示例就使用了group by和聚合函數查詢每個PNR的總記錄數,sql語句如下。
1 -- 1,Group by與聚合函數 2 -- 查詢每個PNR的總記錄數 3 SELECT NewPNR,COUNT(*) FROM dbo.RemoteSession 4 GROUP BY NewPNR;
如果要對分組進行篩選呢?要怎么實現,請繼續往下看。
Group by與Having
要對分組后的結果進行篩選,一般使用having語句來實現。請看下面示例,代碼如下。
1 -- 2,Group by與Having 2 -- 查詢總記錄數>1(或者說有重復的)的PNR 3 SELECT NewPNR,COUNT(*) FROM dbo.RemoteSession 4 GROUP BY NewPNR 5 HAVING COUNT(*)>1;
需要注意的地方
關於group by的使用,有幾個特別需要關注的地方。
- select語句指定的字段要么包含在group by語句中作為分組的依據;要么就要被包含在聚合函數中(比如:count,sum等)。
- 注意where與having的區別,where是在分組前對結果集進行過濾,而having是對group by分組后的結果集進行過濾。
參考資料