MySQL中GROUP BY語句用于對某個或某些字段查詢分組,并返回重復記錄的第一條,本文章通過實例向大家介紹mysql group by使用方法和需要注意的地方,感興趣的朋友可以參考一下。
現在有這樣一個數據表book
id | first_name | last_name | city | age |
1 | Jason | Martin | Toronto | 15 |
2 | Alison | Mathews | Vancouver | 16 |
3 | James | Mathews | Vancouver | 14 |
4 | Celia | Rice | Vancouver | 14 |
5 | David | Larry | New York | 16 |
group by基本實例
我們對city字段進行分組查詢
SELECT * FROM book GROUP BY city
結果如下:
結果如下:
id | first_name | last_name | city | age |
1 | Jason | Martin | Toronto | 15 |
2 | Alison | Mathews | Vancouver | 16 |
5 | David | Larry | New York | 16 |
可以看出,group by是根據city來進行分組的,因為book表中有三個不同的city值,所以會出現三行數據,并且相同的city只返回結果集中的第一條數據。
group by多個字段
下面來看一下group by后面跟多個字段
SELECT * FROM book GROUP BY city,last_name
結果如下:
id | first_name | last_name | city | age |
1 | Jason | Martin | Toronto | 15 |
2 | Alison | Mathews | Vancouver | 16 |
4 | Celia | Rice | Vancouver | 14 |
5 | David | Larry | New York | 16 |
group by后面跟多個字段如何理解呢?GROUP BY city,last_name是指所有city,last_name項只要有一個不相同就會分一個組的。因為上面book表中第二行數據與第三行數據的city和last_name相同,所以會舍棄其中的一行數據,一般都是舍棄后面一行,所以第二行數據保留了。
group by與聚合函數
一般情況下,group by都會與聚合函數一起使用,以達到復雜的數據查詢要求。
比如我們要根據city分組后,獲取每一組有多少條數據
SELECT *,count(*) FROM book GROUP BY city
結果為:
id | first_name | last_name | city | age | count(*) |
1 | Jason | Martin | Toronto | 15 | 1 |
2 | Alison | Mathews | Vancouver | 16 | 3 |
5 | David | Larry | New York | 16 | 1 |
group by having
group by having用于指示被選擇的行必須滿足的條件
比如,我們根據city分組,但我們只需要查詢出每一組的數據條數大于1的。
SELECT *,count(*) FROM book GROUP BY city having count(*)>1
結果集為:
id | first_name | last_name | city | age | count(*) |
2 | Alison | Mathews | Vancouver | 16 | 3 |