這篇文章主要介紹了sql中的group by 和 having 用法淺析,需要的的朋友參考下吧
一、sql中的group by 用法解析:
Group By語句從英文的字面意義上理解就是“根據(jù)(by)一定的規(guī)則進行分組(Group)”。
作用:通過一定的規(guī)則將一個數(shù)據(jù)集劃分成若干個小的區(qū)域,然后針對若干個小區(qū)域進行數(shù)據(jù)處理。
注意:group by 是先排序后分組!
舉例說明:如果要用到group by 一般用到的就是“每”這個字, 例如現(xiàn)在有一個這樣的需求:查詢每個部門有多少人。就要用到分組的技術
select?DepartmentID?as?'部門名稱',COUNT(*)?as?'個數(shù)' from?BasicDepartment group?by?DepartmentID
這個就是使用了group by +字段進行了分組,其中我們就可以理解為我們按照部門的名稱ID
DepartmentID將數(shù)據(jù)集進行了分組;然后再進行各個組的統(tǒng)計數(shù)據(jù)分別有多少;
二、group by 和having 解釋
前提:必須了解sql語言中一種特殊的函數(shù)——聚合函數(shù)。
例如:SUM, COUNT, MAX, AVG等。這些函數(shù)和其它函數(shù)的根本區(qū)別就是它們一般作用在多條記錄上。
WHERE關鍵字在使用集合函數(shù)時不能使用,所以在集合函數(shù)中加上了HAVING來起到測試查詢結果是否符合條件的作用。
having稱為分組過濾條件,也就是分組需要的條件,所以必須與group by聯(lián)用。
需要注意說明:當同時含有where子句、group by 子句 、having子句及聚集函數(shù)時,執(zhí)行順序如下:
1、執(zhí)行where子句查找符合條件的數(shù)據(jù);
2、使用group by 子句對數(shù)據(jù)進行分組;
3、對group by 子句形成的組運行聚集函數(shù)計算每一組的值;
4、最后用having 子句去掉不符合條件的組。
having 子句中的每一個元素也必須出現(xiàn)在select列表中。有些數(shù)據(jù)庫例外,如oracle.
having子句和where子句都可以用來設定限制條件以使查詢結果滿足一定的條件限制。
having子句限制的是組,而不是行。聚合函數(shù)計算的結果可以當條件來使用,where子句中不能使用聚集函數(shù),而having子句中可以。