新聞中心
在 MySQL 中,
GROUP BY 關(guān)鍵字可以根據(jù)一個(gè)或多個(gè)字段對(duì)查詢結(jié)果進(jìn)行分組。

專注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)金塔免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
使用 GROUP BY 關(guān)鍵字的語(yǔ)法格式如下:
GROUP BY <字段名>
其中,“字段名”表示需要分組的字段名稱,多個(gè)字段時(shí)用逗號(hào)隔開。
GROUP BY單獨(dú)使用
單獨(dú)使用 GROUP BY 關(guān)鍵字時(shí),查詢結(jié)果會(huì)只顯示每個(gè)分組的第一條記錄。
例 1
下面根據(jù) tb_students_info 表中的 sex 字段進(jìn)行分組查詢,SQL 語(yǔ)句和運(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ù)會(huì)把每個(gè)分組的字段值都顯示出來(lái)。
例 2
下面根據(jù) tb_students_info 表中的 sex 字段進(jìn)行分組查詢,使用 GROUP_CONCAT() 函數(shù)將每個(gè)分組的 name 字段的值都顯示出來(lái)。SQL 語(yǔ)句和運(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é)生姓名都顯示出來(lái)了。
例 3
下面根據(jù) tb_students_info 表中的 age 和 sex 字段進(jìn)行分組查詢。SQL 語(yǔ)句和運(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)
上面實(shí)例在分組過(guò)程中,先按照 age 字段進(jìn)行分組,當(dāng) age 字段值相等時(shí),再把 age 字段值相等的記錄按照 sex 字段進(jìn)行分組。
多個(gè)字段分組查詢時(shí),會(huì)先按照第一個(gè)字段進(jìn)行分組。如果第一個(gè)字段中有相同的值,MySQL 才會(huì)按照第二個(gè)字段進(jìn)行分組。如果第一個(gè)字段中的數(shù)據(jù)都是唯一的,那么 MySQL 將不再對(duì)第二個(gè)字段進(jìn)行分組。
GROUP BY 與聚合函數(shù)
在數(shù)據(jù)統(tǒng)計(jì)時(shí),GROUP BY 關(guān)鍵字經(jīng)常和聚合函數(shù)一起使用。
聚合函數(shù)包括 COUNT(),SUM(),AVG(),MAX() 和 MIN()。其中,COUNT() 用來(lái)統(tǒng)計(jì)記錄的條數(shù);SUM() 用來(lái)計(jì)算字段值的總和;AVG() 用來(lái)計(jì)算字段值的平均值;MAX() 用來(lái)查詢字段的最大值;MIN() 用來(lái)查詢字段的最小值。
關(guān)于聚合函數(shù)的詳細(xì)內(nèi)容可以閱讀學(xué)習(xí)《MySQL函數(shù)大全》一節(jié)。
例 4
下面根據(jù) tb_students_info 表的 sex 字段進(jìn)行分組查詢,使用 COUNT() 函數(shù)計(jì)算每一組的記錄數(shù)。SQL 語(yǔ)句和運(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)鍵字用來(lái)在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和,即統(tǒng)計(jì)記錄數(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) 顯示了每個(gè)分組的 name 字段值。同時(shí),最后一條記錄的 GROUP_CONCAT(name) 字段的值剛好是上面分組 name 字段值的總和。
新聞標(biāo)題:創(chuàng)新互聯(lián)數(shù)據(jù)庫(kù)教程:MySQL使用GROUPBY分組查詢
路徑分享:http://m.fisionsoft.com.cn/article/dhjjicd.html


咨詢
建站咨詢
