1. 程式人生 > 其它 >sql 之 group by

sql 之 group by

sql查詢,談到分組,首先想到group by,但group by到底有哪些用法,似乎不是很清楚,做一下總結。

注意事項

在使用GROUP BY子句前,需要知道一些重要的規定:

❑ GROUP BY子句可以包含任意數目的列,因而可以對分組進行巢狀,更細緻地進行資料分組。【可以分組巢狀

❑ 如果在GROUP BY子句中嵌套了分組,資料將在最後指定的分組上進行彙總。換句話說,在建立分組時,指定的所有列都一起計算(所以不能從個別的列取回資料)。【分組後只能按所分出的組取資料】

❑ GROUP BY子句中列出的每一列都必須是檢索列或有效的表示式(但不能是聚集函式)。如果在SELECT中使用表示式,則必須在GROUP BY子句中指定相同的表示式。不能使用別名

❑ 大多數SQL實現不允許GROUP BY列帶有長度可變的資料型別(如文字或備註型欄位)。

❑ 除聚集計算語句外,SELECT語句中的每一列都必須在GROUP BY子句中給出。

❑ 如果分組列中包含具有NULL值的行,則NULL將作為一個分組返回。如果列中有多行NULL值,它們將分為一組。

❑ GROUP BY子句必須出現在WHERE子句之後,ORDER BY子句之前

過濾分組

分組後可以使用having來過濾分組後的資料。

最後一行增加了HAVING子句,它過濾COUNT(*)>= 2(兩個以上訂單)的那些分組。

where與having的區別:WHERE過濾行,而HAVING過濾分組。WHERE在資料分組前進行過濾,HAVING在資料分組後進行過濾。

可以先使用where過濾,然後分組再使用having進行過濾。

查詢具有兩個以上產品且其價格大於等於4的供應商:

分組與排序

用GROUP BY分組的資料確實是以分組順序輸出的。但並不總是這樣,這不是SQL規範所要求的。

一般在使用GROUP BY子句時,應該也給出ORDER BY子句。這是保證資料正確排序的唯一方法。千萬不要僅依賴GROUP BY排序資料。


https://blog.csdn.net/hengji666/article/details/54924387
https://www.jb51.net/article/179261.htm