mysql 名字分组查询id_MySQL对数据表进行分组查询(GROUP BY)
MySQL對(duì)數(shù)據(jù)表進(jìn)行分組查詢(GROUP BY)
GROUP BY關(guān)鍵字可以將查詢結(jié)果按照某個(gè)字段或多個(gè)字段進(jìn)行分組。字段中值相等的為一組。基本的語法格式如下:
GROUP BY 屬性名 [HAVING 條件表達(dá)式] [WITH ROLLUP]
屬性名:是指按照該字段的值進(jìn)行分組。
HAVING 條件表達(dá)式:用來限制分組后的顯示,符合條件表達(dá)式的結(jié)果將被顯示。
WITH ROLLUP:將會(huì)在所有記錄的最后加上一條記錄。加上的這一條記錄是上面所有記錄的總和。
GROUP BY關(guān)鍵字可以和GROUP_CONCAT()函數(shù)一起使用。GROUP_CONCAT()函數(shù)會(huì)把每個(gè)分組中指定的字段值都顯示出來。
同時(shí),GROUP BY關(guān)鍵字通常與集合函數(shù)一起使用。集合函數(shù)包括COUNT()函數(shù)、SUM()函數(shù)、AVG()函數(shù)、MAX()函數(shù)和MIN()函數(shù)等。
COUNT()函數(shù):用于統(tǒng)計(jì)記錄的條數(shù)。
SUM()函數(shù):用于計(jì)算字段的值的總和。
AVG()函數(shù):用于計(jì)算字段的值的平均值。
MAX()函數(shù):用于查詢字段的最大值。
MIN()函數(shù):用于查詢字段的最小值。
如果GROUP BY不與上述函數(shù)一起使用,那么查詢結(jié)果就是字段取值的分組情況。字段中取值相同的記錄為一組,但是只顯示該組的第一條記錄。
單獨(dú)使用GROUP BY關(guān)鍵字進(jìn)行分組
如果單獨(dú)使用GROUP BY關(guān)鍵字,查詢結(jié)果只顯示一個(gè)分組的一條記錄。
實(shí)例:將employee表的sex字段進(jìn)行分組查詢,將查詢結(jié)果與分組前的結(jié)果進(jìn)行對(duì)比。操作步驟如下:
1. 首先執(zhí)行不帶GROUP BY關(guān)鍵字的SELECT語句。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果顯示的是employee表中原始的記錄情況。
2. 執(zhí)行帶有GROUP BY關(guān)鍵字的SELECT語句。代碼如下:
SELECT * FROM employee GROUP BY sex;
在DOS提示符窗口中查看執(zhí)行帶有GROUP BY關(guān)鍵字的SELECT語句的操作效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果只顯示了兩條記錄。這兩條記錄的sex字段的值分別為“女”和“男”。
查詢結(jié)果進(jìn)行比較,GROUP BY關(guān)鍵字只顯示每個(gè)分組的一條記錄。這說明,GROUP BY關(guān)鍵字單獨(dú)使用時(shí),只能查詢出每個(gè)分組的一條記錄,這樣做的意義不大。因此,一般在使用集合函數(shù)時(shí)才使用GROUP BY關(guān)鍵字。
GROUP BY關(guān)鍵字與GROUP_CONCAT()函數(shù)一起使用
GROUP BY關(guān)鍵字與GROUP_CONCAT()函數(shù)一起使用時(shí),每個(gè)分組中指定的字段值會(huì)全部顯示出來。
實(shí)例:將employee表按照sex字段進(jìn)行分組查詢。使用GROUP_CONCAT()函數(shù)將每個(gè)分組的name字段的值顯示出來。
SELECT語句的代碼如下:
SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex;
在DOS提示符窗口中查看代碼的執(zhí)行效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果顯示,查詢結(jié)果分為兩組。sex字段取值為“女”的記錄是一組,取值為“男”的記錄是一組。每一組中所有人的名字都被查詢出來了。
該實(shí)例說明,使用GROUP_CONCAT()函數(shù)可以很好的把分組情況表示出來。
GROUP BY關(guān)鍵字與集合函數(shù)一起使用
GROUP BY關(guān)鍵字與集合函數(shù)一起使用時(shí),可以通過集合函數(shù)計(jì)算分組中的總記錄、最大值、最小值等。
實(shí)例:將employee表的sex字段進(jìn)行分組查詢。sex字段取值相同的為一組。然后對(duì)每一組使用集合函數(shù)COUNT()函數(shù)進(jìn)行計(jì)算,求出每一組的記錄數(shù)。
SELECT語句的代碼如下:
SELECT sex,COUNT(sex) FROM employee GROUP BY sex;
在DOS提示符窗口中查看GROUP BY關(guān)鍵字與集合函數(shù)一起使用的操作效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果顯示,查詢結(jié)果按sex字段的取值進(jìn)行分組。取值為“女”的記錄為一組,取值為“男”的記錄為一組。COUNT(sex)計(jì)算出了sex字段不同分組的記錄數(shù)。第一組共有2條記錄,第二組共有3條記錄。
提示
通常情況下,GROUP BY關(guān)鍵字與集合函數(shù)一起使用,先使用GROUP BY關(guān)鍵字將記錄分組,然后每組都使用集合函數(shù)進(jìn)行計(jì)算。在統(tǒng)計(jì)時(shí)經(jīng)常需要使用GROUP BY關(guān)鍵字和集合函數(shù)。
GROUP BY關(guān)鍵字與HAVING一起使用
使用GROUP BY關(guān)鍵字時(shí),如果加上“HAVING 條件表達(dá)式”,則可以限制輸出的結(jié)果。只有符合條件表達(dá)式的結(jié)果才會(huì)顯示。
實(shí)例:將employee表的sex字段進(jìn)行分組查詢。然后顯示記錄數(shù)大于等于3的分組。
SELECT語句的代碼如下:
SELECT sex,COUNT(sex) FROM employee GROUP BY sex HAVING COUNT(sex)>=3;
在DOS提示符窗口中查看GROUP BY關(guān)鍵字與HAVING一起使用的操作效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果只顯示了取值為“男”的記錄的情況。因?yàn)?#xff0c;該分組的記錄數(shù)為3,剛好符合HAVING COUNT(sex)>=3的條件。
該實(shí)例說明,“HAVING 條件表達(dá)式”可以限制查詢結(jié)果的顯示情況。
提示
“HAVING 條件表達(dá)式”與“WHERE 條件表達(dá)式”都是用于限制顯示的。但是,兩者起作用的地方不一樣。
WHERE 條件表達(dá)式:作用于表或者視圖,是表和視圖的查詢條件。
HAVING 條件表達(dá)式:作用于分組后的記錄,用于選擇符合條件的組。
按照多個(gè)字段進(jìn)行分組
在MySQL中,還可以按照多個(gè)字段進(jìn)行分組。例如,employee表按照d_id字段和sex字段進(jìn)行分組。分組過程中,先按照d_id字段進(jìn)行分組,遇到d_id字段的值相等的情況時(shí),再把d_id值相等的記錄按照sex字段進(jìn)行分組。
實(shí)例:將employee表按照d_id字段和sex字段進(jìn)行分組。
SELECT語句的代碼如下:
SELECT * FROM employee GROUP BY d_id,sex;
在DOS提示符窗口中查看按照多個(gè)字段進(jìn)行分組的操作效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果顯示,記錄先按照d_id字段進(jìn)行分組,因?yàn)榉謩e有兩條記錄的d_id的值為1001和1004,所以這4條記錄再次按照sex字段的取值進(jìn)行了分組。
GROUP BY關(guān)鍵字與WITH ROLLUP一起使用
使用WITH ROLLUP時(shí),將會(huì)在所有記錄的最后加上一條記錄。這條記錄是上面所有記錄的總和。
實(shí)例:將employee表的sex字段進(jìn)行分組查詢。使用COUNT()函數(shù)計(jì)算每組的記錄數(shù),并且加上WITH ROLLUP。
SELECT語句的代碼如下:
SELECT sex,COUNT(sex) FROM employee GROUP BY sex WITH ROLLUP;
在DOS提示符窗口中查看GROUP BY關(guān)鍵字與WITH ROLLUP一起使用的操作效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果顯示,計(jì)算出了各個(gè)分組的記錄數(shù),并且,在記錄的最后加上了一條新的記錄。該記錄的COUNT(sex)列的值正好是上面分組的值的總和。
實(shí)例:將employee表的sex字段進(jìn)行分組查詢。使用GROUP_CONCAT()函數(shù)查看每組的name字段的值,并且加上WITH ROLLUP。
SELECT語句的代碼如下:
SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex WITH ROLLUP;
在DOS提示符窗口中查看SELECT語句WITH ROLLUP參數(shù)的操作效果。如下圖所示:
上圖中代碼執(zhí)行的結(jié)果顯示,GROUP_CONCAT(name)顯示了每個(gè)分組的name字段的值。同時(shí),最后一條記錄的GROUP_CONCAT(name)列的值正好是上面分組name取值的總和。
時(shí)間: 05-14
總結(jié)
以上是生活随笔為你收集整理的mysql 名字分组查询id_MySQL对数据表进行分组查询(GROUP BY)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是UKey?Ukey在密评中的应用
- 下一篇: ⟅UNIX网络编程⟆⦔目录