mysql名字分组查询id_MySQL对数据表进⾏分组查询
(GROUPBY)
MySQL对数据表进⾏分组查询(GROUP BY)
GROUP BY关键字可以将查询结果按照某个字段或多个字段进⾏分组。字段中值相等的为⼀组。基本的语法格式如下:
GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP]
属性名:是指按照该字段的值进⾏分组。
HAVING 条件表达式:⽤来限制分组后的显⽰,符合条件表达式的结果将被显⽰。
WITH ROLLUP:将会在所有记录的最后加上⼀条记录。加上的这⼀条记录是上⾯所有记录的总和。
GROUP BY关键字可以和GROUP_CONCAT()函数⼀起使⽤。GROUP_CONCAT()函数会把每个分组中指定的字段值都显⽰出来。
同时,GROUP BY关键字通常与集合函数⼀起使⽤。集合函数包括COUNT()函数、SUM()函数、AVG()
函数、MAX()函数和MIN()函数等。
COUNT()函数:⽤于统计记录的条数。
SUM()函数:⽤于计算字段的值的总和。
AVG()函数:⽤于计算字段的值的平均值。
MAX()函数:⽤于查询字段的最⼤值。
MIN()函数:⽤于查询字段的最⼩值。
如果GROUP BY不与上述函数⼀起使⽤,那么查询结果就是字段取值的分组情况。字段中取值相同的记录为⼀组,但是只显⽰该组的第⼀条记录。
单独使⽤GROUP BY关键字进⾏分组
如果单独使⽤GROUP BY关键字,查询结果只显⽰⼀个分组的⼀条记录。
实例:将employee表的sex字段进⾏分组查询,将查询结果与分组前的结果进⾏对⽐。操作步骤如下:
1. ⾸先执⾏不带GROUP BY关键字的SELECT语句。如下图所⽰:
上图中代码执⾏的结果显⽰的是employee表中原始的记录情况。
2. 执⾏带有GROUP BY关键字的SELECT语句。代码如下:
SELECT * FROM employee GROUP BY sex;
在DOS提⽰符窗⼝中查看执⾏带有GROUP BY关键字的SELECT语句的操作效果。如下图所⽰:
上图中代码执⾏的结果只显⽰了两条记录。这两条记录的sex字段的值分别为“⼥”和“男”。
查询结果进⾏⽐较,GROUP BY关键字只显⽰每个分组的⼀条记录。这说明,GROUP BY关键字单独使⽤时,只能查询出每个分组的⼀条记录,这样做的意义不⼤。因此,⼀般在使⽤集合函数时才使⽤GROUP BY关键字。
GROUP BY关键字与GROUP_CONCAT()函数⼀起使⽤
GROUP BY关键字与GROUP_CONCAT()函数⼀起使⽤时,每个分组中指定的字段值会全部显⽰出来。
实例:将employee表按照sex字段进⾏分组查询。使⽤GROUP_CONCAT()函数将每个分组的name字段的值显⽰出来。
SELECT语句的代码如下:
SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex;
在DOS提⽰符窗⼝中查看代码的执⾏效果。如下图所⽰:
上图中代码执⾏的结果显⽰,查询结果分为两组。sex字段取值为“⼥”的记录是⼀组,取值为“男”的记录是⼀组。每⼀组中所有⼈的名字都被查询出来了。
该实例说明,使⽤GROUP_CONCAT()函数可以很好的把分组情况表⽰出来。
GROUP BY关键字与集合函数⼀起使⽤
GROUP BY关键字与集合函数⼀起使⽤时,可以通过集合函数计算分组中的总记录、最⼤值、最⼩值等。
实例:将employee表的sex字段进⾏分组查询。sex字段取值相同的为⼀组。然后对每⼀组使⽤集合函数COUNT()函数进⾏计算,求出每⼀组的记录数。
SELECT语句的代码如下:
SELECT sex,COUNT(sex) FROM employee GROUP BY sex;
在DOS提⽰符窗⼝中查看GROUP BY关键字与集合函数⼀起使⽤的操作效果。如下图所⽰:
上图中代码执⾏的结果显⽰,查询结果按sex字段的取值进⾏分组。取值为“⼥”的记录为⼀组,取值为“男”的记录为⼀组。
COUNT(sex)计算出了sex字段不同分组的记录数。第⼀组共有2条记录,第⼆组共有3条记录。
提⽰
通常情况下,GROUP BY关键字与集合函数⼀起使⽤,先使⽤GROUP BY关键字将记录分组,然后每组都使⽤集合函数进⾏计算。在统计时经常需要使⽤GROUP BY关键字和集合函数。
GROUP BY关键字与HAVING⼀起使⽤
使⽤GROUP BY关键字时,如果加上“HAVING 条件表达式”,则可以限制输出的结果。只有符合条件表达式的结果才会显⽰。
实例:将employee表的sex字段进⾏分组查询。然后显⽰记录数⼤于等于3的分组。
SELECT语句的代码如下:
SELECT sex,COUNT(sex) FROM employee GROUP BY sex HAVING COUNT(sex)>=3;
在DOS提⽰符窗⼝中查看GROUP BY关键字与HAVING⼀起使⽤的操作效果。如下图所⽰:
上图中代码执⾏的结果只显⽰了取值为“男”的记录的情况。因为,该分组的记录数为3,刚好符合HAVING COUNT(sex)>=3的条件。
该实例说明,“HAVING 条件表达式”可以限制查询结果的显⽰情况。
提⽰
“HAVING 条件表达式”与“WHERE 条件表达式”都是⽤于限制显⽰的。但是,两者起作⽤的地⽅不⼀样。
WHERE 条件表达式:作⽤于表或者视图,是表和视图的查询条件。
HAVING 条件表达式:作⽤于分组后的记录,⽤于选择符合条件的组。
按照多个字段进⾏分组
在MySQL中,还可以按照多个字段进⾏分组。例如,employee表按照d_id字段和sex字段进⾏分组。分组过程中,先按照d_id字段进⾏分组,遇到d_id字段的值相等的情况时,再把d_id值相等的记录按照sex字段进⾏分组。
实例:将employee表按照d_id字段和sex字段进⾏分组。
SELECT语句的代码如下:
SELECT * FROM employee GROUP BY d_id,sex;
在DOS提⽰符窗⼝中查看按照多个字段进⾏分组的操作效果。如下图所⽰:
上图中代码执⾏的结果显⽰,记录先按照d_id字段进⾏分组,因为分别有两条记录的d_id的值为1001和1004,所以这4条记录再次按照sex字段的取值进⾏了分组。
GROUP BY关键字与WITH ROLLUP⼀起使⽤
使⽤WITH ROLLUP时,将会在所有记录的最后加上⼀条记录。这条记录是上⾯所有记录的总和。
实例:将employee表的sex字段进⾏分组查询。使⽤COUNT()函数计算每组的记录数,并且加上WITH ROLLUP。
SELECT语句的代码如下:
groupby分组SELECT sex,COUNT(sex) FROM employee GROUP BY sex WITH ROLLUP;
在DOS提⽰符窗⼝中查看GROUP BY关键字与WITH ROLLUP⼀起使⽤的操作效果。如下图所⽰:
上图中代码执⾏的结果显⽰,计算出了各个分组的记录数,并且,在记录的最后加上了⼀条新的记录。该记录的COUNT(sex)列的值正好是上⾯分组的值的总和。
实例:将employee表的sex字段进⾏分组查询。使⽤GROUP_CONCAT()函数查看每组的name字段的值,并且加上WITH ROLLUP。
SELECT语句的代码如下:
SELECT sex,GROUP_CONCAT(name) FROM employee GROUP BY sex WITH ROLLUP;
在DOS提⽰符窗⼝中查看SELECT语句WITH ROLLUP参数的操作效果。如下图所⽰:
上图中代码执⾏的结果显⽰,GROUP_CONCAT(name)显⽰了每个分组的name字段的值。同时,最后⼀条记录的
GROUP_CONCAT(name)列的值正好是上⾯分组name取值的总和。
时间: 05-14

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。