1. 程式人生 > >mysql中group by

mysql中group by

對於group by在mysql中的使用和Oracle的差異性很大,準確的說不光和Oracle和別的資料庫差異性一樣,這些有點不太遵循標準SQL。我們知道常規的 sql,對於group by來說一定要結合聚合函式,而且選擇的欄位除了聚合函式外,還必須在group by中出現,否則報錯,但是在mysql中擴充套件了這樣的功能
首先對於不加聚合函式的sql來說,它的功能結合了limit來得出結果,仔細想想的時候有點Oracle分析函式的味道,limit的時候得到的並不是 最大最小的值,而是某一下group by結果集中第一行,也就是剛才說的相當與先group by, 然後在每個group by下面進行limit 1。

其次,剛才還說了常規的group by結合聚合函式的時候,選擇的欄位除了聚合函式外,必須在group by中存在,但是在mysql中不是這樣了,它具有隱含欄位的功能,例如:


(root:im-mysql:16:34:45)[test]> select a,b,c,count(*) from test1 group by a,b;
+------+------+------+----------+
| a   


 | b    | c    | count(*) |
+------+------+------+----------+
|    1 |    1 |    1 |        3 |
|    1 |    2 |    5 |        3 |

+------+------+------+----------+


對於沒有選擇的欄位,上面是c,c的值還是和上面說到的一樣,是根據得到的結果集然後根據每個group by 進行limit 1得到的結果。