MySQL使用GROUP BY分組查詢
在 MySQL 中,GROUP BY 關(guān)鍵字可以根據(jù)一個或多個字段對查詢結(jié)果進(jìn)行分組。
使用 GROUP BY 關(guān)鍵字的語法格式如下:
GROUP BY <字段名>
其中,“字段名”表示需要分組的字段名稱,多個字段時用逗號隔開。
GROUP BY單獨使用
單獨使用 GROUP BY 關(guān)鍵字時,查詢結(jié)果會只顯示每個分組的第一條記錄。
例 1
下面根據(jù) tb_students_info 表中的 sex 字段進(jìn)行分組查詢,SQL 語句和運(yùn)行結(jié)果如下:
mysql> SELECT `name`,`sex` FROM tb_students_info
-> GROUP BY sex;
+-------+------+
| name | sex |
+-------+------+
| Henry | 女 |
| Dany | 男 |
+-------+------+
2 rows in set (0.01 sec)結(jié)果中只顯示了兩條記錄,這兩條記錄的 sex 字段的值分別為“女”和“男”。
GROUP BY 與 GROUP_CONCAT()
GROUP BY 關(guān)鍵字可以和 GROUP_CONCAT() 函數(shù)一起使用。GROUP_CONCAT() 函數(shù)會把每個分組的字段值都顯示出來。
例 2
下面根據(jù) tb_students_info 表中的 sex 字段進(jìn)行分組查詢,使用 GROUP_CONCAT() 函數(shù)將每個分組的 name 字段的值都顯示出來。SQL 語句和運(yùn)行結(jié)果如下:
mysql> SELECT `sex`, GROUP_CONCAT(name) FROM tb_students_info
-> GROUP BY sex;
+------+----------------------------+
| sex | GROUP_CONCAT(name) |
+------+----------------------------+
| 女 | Henry,Jim,John,Thomas,Tom |
| 男 | Dany,Green,Jane,Lily,Susan |
+------+----------------------------+
2 rows in set (0.00 sec)由結(jié)果可以看到,查詢結(jié)果分為兩組,sex 字段值為“女”的是一組,值為“男”的是一組,且每組的學(xué)生姓名都顯示出來了。
例 3
下面根據(jù) tb_students_info 表中的 age 和 sex 字段進(jìn)行分組查詢。SQL 語句和運(yùn)行結(jié)果如下:
mysql> SELECT age,sex,GROUP_CONCAT(name) FROM tb_students_info
-> GROUP BY age,sex;
+------+------+--------------------+
| age | sex | GROUP_CONCAT(name) |
+------+------+--------------------+
| 21 | 女 | John |
| 22 | 女 | Thomas |
| 22 | 男 | Jane,Lily |
| 23 | 女 | Henry,Tom |
| 23 | 男 | Green,Susan |
| 24 | 女 | Jim |
| 25 | 男 | Dany |
+------+------+--------------------+
7 rows in set (0.00 sec)上面實例在分組過程中,先按照 age 字段進(jìn)行分組,當(dāng) age 字段值相等時,再把 age 字段值相等的記錄按照 sex 字段進(jìn)行分組。
多個字段分組查詢時,會先按照第一個字段進(jìn)行分組。如果第一個字段中有相同的值,MySQL 才會按照第二個字段進(jìn)行分組。如果第一個字段中的數(shù)據(jù)都是唯一的,那么 MySQL 將不再對第二個字段進(jìn)行分組。
GROUP BY 與聚合函數(shù)
在數(shù)據(jù)統(tǒng)計時,GROUP BY 關(guān)鍵字經(jīng)常和聚合函數(shù)一起使用。
聚合函數(shù)包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用來統(tǒng)計記錄的條數(shù);SUM() 用來計算字段值的總和;AVG() 用來計算字段值的平均值;MAX() 用來查詢字段的最大值;MIN() 用來查詢字段的最小值。
例 4
下面根據(jù) tb_students_info 表的 sex 字段進(jìn)行分組查詢,使用 COUNT() 函數(shù)計算每一組的記錄數(shù)。SQL 語句和運(yùn)行結(jié)果如下:
mysql> SELECT sex,COUNT(sex) FROM tb_students_info
-> GROUP BY sex;
+------+------------+
| sex | COUNT(sex) |
+------+------------+
| 女 | 5 |
| 男 | 5 |
+------+------------+
2 rows in set (0.00 sec)結(jié)果顯示,sex 字段值為“女”的記錄是一組,有 5 條記錄;sex 字段值為“男”的記錄是一組,有 5 條記錄。
GROUP BY 與 WITH ROLLUP
WITH POLLUP 關(guān)鍵字用來在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和,即統(tǒng)計記錄數(shù)量。
例 5
下面根據(jù) tb_students_info 表中的 sex 字段進(jìn)行分組查詢,并使用 WITH ROLLUP 顯示記錄的總和。
mysql> SELECT sex,GROUP_CONCAT(name) FROM tb_students_info
->GROUP BY sex WITH ROLLUP;
+------+------------------------------------------------------+
| sex | GROUP_CONCAT(name) |
+------+------------------------------------------------------+
| 女 | Henry,Jim,John,Thomas,Tom |
| 男 | Dany,Green,Jane,Lily,Susan |
| NULL | Henry,Jim,John,Thomas,Tom,Dany,Green,Jane,Lily,Susan |
+------+------------------------------------------------------+
3 rows in set (0.00 sec)查詢結(jié)果顯示,GROUP_CONCAT(name) 顯示了每個分組的 name 字段值。同時,最后一條記錄的 GROUP_CONCAT(name) 字段的值剛好是上面分組 name 字段值的總和。
到此這篇關(guān)于MySQL使用GROUP BY分組查詢的文章就介紹到這了,更多相關(guān)MySQL GROUP BY分組查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL運(yùn)行報錯:“Expression?#1?of?SELECT?list?is?not?in?GROUP?BY?clause?and?contains?nonaggre”解決方法
- 解決大于5.7版本mysql的分組報錯Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated
- mysql 8.0 找不到my.ini配置文件以及報sql_mode=only_full_group_by解決方案
- MySQL分組查詢獲取每組最新的一條數(shù)據(jù)詳解(group?by)
- 解決MySQL this is incompatible with sql_mode=only_full_group_by 問題
- MySQL報錯Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
相關(guān)文章
MySQL觸發(fā)器實現(xiàn)兩表數(shù)據(jù)同步的代碼詳解
在數(shù)據(jù)庫應(yīng)用中,我們經(jīng)常需要對數(shù)據(jù)進(jìn)行某些操作,并在操作完成后進(jìn)行相應(yīng)的處理,這時候,可以使用觸發(fā)器來實現(xiàn)這些功能,MySQL提供了強(qiáng)大的觸發(fā)器功能,本文將給大家詳細(xì)介紹MySQL觸發(fā)器實現(xiàn)兩表數(shù)據(jù)同步,需要的朋友可以參考下2023-12-12
MySQL數(shù)據(jù)類型與表操作全指南(?從基礎(chǔ)到高級實踐)
本文詳解MySQL數(shù)據(jù)類型分類(數(shù)值、日期/時間、字符串)及表操作(創(chuàng)建、修改、維護(hù)),涵蓋優(yōu)化技巧如數(shù)據(jù)類型選擇、備份、分區(qū),強(qiáng)調(diào)規(guī)范設(shè)計與實際應(yīng)用結(jié)合,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-08-08
ubuntu下磁盤空間不足導(dǎo)致mysql無法啟動的解決方法
昨天又遇到了MySQL數(shù)據(jù)庫無法重啟的問題,還以為是權(quán)限的原因,后來發(fā)現(xiàn)提示是因為磁盤空間不足導(dǎo)致的,通過查找相關(guān)資料得以解決了,所以下面這篇文章主要介紹了ubuntu下磁盤空間不足導(dǎo)致mysql無法啟動的解決方法,需要的朋友可以參考下。2017-03-03
使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法
這篇文章主要介紹了使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法,需要的朋友可以參考下2015-09-09
mysql 5.7.13 winx64安裝配置方法圖文教程(win10)
這篇文章主要為大家分享了mysql 5.7.13 winx64安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01
MySQL動態(tài)字符串處理DYNAMIC_STRING
本文主要給大家簡單講解了mysql如何使用DYNAMIC_STRING來進(jìn)行動態(tài)字符串的保存,非常的實用,有需要的小伙伴可以參考下2016-10-10

