三、mysql分组查询

功能:使用group by子句将表中的数据分成若干组

语法:

  SELECT column,group_function(column)

  FROM table

  [WHERE  condition]  #分组前的筛选

  [GROUP BY   group_by_expression]

  [having condition]  # 分组后的筛选

  [ORDER BY   column];

 

特点:

  1) 分组查询中的筛选条件分为两类

 

数据源

位置

关键字

分组前筛选

原始表

Group by 子句的前面

where

分组后筛选

分组后的结果集

Group by 子句的后面

having

 

  2) 分组函数做条件肯定是放在having子句中

  3) 能用分组前筛选的,优先考虑使用分组前筛选

  4) Group by 子句支持单个字段分组,多个字段分组(多个字段之间用逗号隔开没有顺序要求),表达式或函数(用得较少)

  5) 也可以添加排序(排序放在整个分组查询的最后)

 

group by + group_concat()

  group_concat(字段名)可以作为一个输出字段来使用,表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合

  

select gender from students group by gender;
+--------+
| gender |
+--------+
| 男     |
| 女     |
| 中性   |
| 保密   |
+--------+

select gender,group_concat(name) from students group by gender;
+--------+-----------------------------------------------------------+
| gender | group_concat(name)                                        |
+--------+-----------------------------------------------------------+
| 男     | 彭于晏,刘德华,周杰伦,程坤,郭靖                                 |
| 女     | 小明,小月月,黄蓉,王祖贤,刘亦菲,静香,周杰                        |
| 中性   | 金星                                                       |
| 保密   | 凤姐                                                       |
+--------+-----------------------------------------------------------+


select gender,group_concat(id) from students group by gender;
+--------+------------------+
| gender | group_concat(id) |
+--------+------------------+
| 男     | 3,4,8,9,14       |
| 女     | 1,2,5,7,10,12,13 |
| 中性   | 11               |
| 保密   | 6                |
+--------+------------------+

 

group by + with rollup

  with rollup的作用是:在最后新增一行,来记录当前列里所有记录的总和

select gender,count(*) from students group by gender with rollup;
+--------+----------+
| gender | count(*) |
+--------+----------+
| 男     |        5 |
| 女     |        7 |
| 中性   |        1 |
| 保密   |        1 |
| NULL   |       14 |
+--------+----------+


select gender,group_concat(age) from students group by gender with rollup;
+--------+-------------------------------------------+
| gender | group_concat(age)                         |
+--------+-------------------------------------------+
| 男     | 29,59,36,27,12                            |
| 女     | 18,18,38,18,25,12,34                      |
| 中性   | 33                                        |
| 保密   | 28                                        |
| NULL   | 29,59,36,27,12,18,18,38,18,25,12,34,33,28 |
+--------+-------------------------------------------+

 

posted @ 2020-03-27 18:57  Norni  阅读(205)  评论(0编辑  收藏  举报