美文网首页
分组查询

分组查询

作者: Carver_ | 来源:发表于2020-04-15 22:08 被阅读0次

分组查询

group by

group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组

group by可用于单个字段分组,也可用于多个字段分组

select*fromstudents;+----+-----------+------+--------+--------+--------+-----------+| id | name      | age  | height | gender | cls_id | is_delete |+----+-----------+------+--------+--------+--------+-----------+|  1 | 小明      |  18 | 180.00 | 女    |      1 |          ||  2 | 小月月    |  18 | 180.00 | 女    |      2 | �        ||  3 | 彭于晏    |  29 | 185.00 | 男    |      1 |          ||  4 | 刘德华    |  59 | 175.00 | 男    |      2 | �        ||  5 | 黄蓉      |  38 | 160.00 | 女    |      1 |          ||  6 | 凤姐      |  28 | 150.00 | 保密  |      2 | �        ||  7 | 王祖贤    |  18 | 172.00 | 女    |      1 | �        ||  8 | 周杰伦    |  36 |  NULL | 男    |      1 |          ||  9 | 程坤      |  27 | 181.00 | 男    |      2 |          || 10 | 刘亦菲    |  25 | 166.00 | 女    |      2 |          || 11 | 金星      |  33 | 162.00 | 中性  |      3 | �        || 12 | 静香      |  12 | 180.00 | 女    |      4 |          || 13 | 周杰      |  34 | 176.00 | 女    |      5 |          || 14 | 郭靖      |  12 | 170.00 | 男    |      4 |          |+----+-----------+------+--------+--------+--------+-----------+selectgenderfromstudentsgroupbygender;+--------+| gender |+--------+| 男    || 女    || 中性  || 保密  |+--------+

根据gender字段来分组,gender字段的全部值有4个'男','女','中性','保密',所以分为了4组 当group by单独使用时,只显示出每组的第一条记录, 所以group by单独使用时的实际意义不大

group by + group_concat()

group_concat(字段名)可以作为一个输出字段来使用,

表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合

selectgenderfromstudentsgroupbygender;+--------+| gender |+--------+| 男    || 女    || 中性  || 保密  |+--------+selectgender,group_concat(name)fromstudentsgroupbygender;+--------+-----------------------------------------------------------+| gender | group_concat(name)                                        |+--------+-----------------------------------------------------------+| 男    | 彭于晏,刘德华,周杰伦,程坤,郭靖                                || 女    | 小明,小月月,黄蓉,王祖贤,刘亦菲,静香,周杰                        || 中性  | 金星                                                      || 保密  | 凤姐                                                      |+--------+-----------------------------------------------------------+selectgender,group_concat(id)fromstudentsgroupbygender;+--------+------------------+| gender | group_concat(id) |+--------+------------------+| 男    | 3,4,8,9,14      || 女    | 1,2,5,7,10,12,13 || 中性  | 11              || 保密  | 6                |+--------+------------------+

group by + 集合函数

通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作

select gender,group_concat(age) from students group by gender;

+--------+----------------------+

| gender | group_concat(age)    |

+--------+----------------------+

| 男    | 29,59,36,27,12      |

| 女    | 18,18,38,18,25,12,34 |

| 中性  | 33                  |

| 保密  | 28                  |

+--------+----------------------+

分别统计性别为男/女的人年龄平均值

select gender,avg(age) from students group by gender;

+--------+----------+

| gender | avg(age) |

+--------+----------+

| 男    |  32.6000 |

| 女    |  23.2857 |

| 中性  |  33.0000 |

| 保密  |  28.0000 |

+--------+----------+

分别统计性别为男/女的人的个数

select gender,count(*) from students group by gender;

+--------+----------+

| gender | count(*) |

+--------+----------+

| 男    |        5 |

| 女    |        7 |

| 中性  |        1 |

| 保密  |        1 |

+--------+----------+

group by + having

having 条件表达式:用来分组查询后指定一些条件来输出查询结果

having作用和where一样,但having只能用于group by

select gender,count(*) from students group by gender having count(*)>2;

+--------+----------+

| gender | count(*) |

+--------+----------+

| 男    |        5 |

| 女    |        7 |

+--------+----------+

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 |

+--------+-------------------------------------------+

相关文章

  • Mysql笔记之分组函数和分组查询

    1、分组函数 2、分组查询 3、分组查询案例

  • java基础-day31-数据库2.0

    7.7 分组查询 7.8 分组过滤查询 7.9 限定查询 7.10 基本查询总结 7.11 子查询 7.11.1 ...

  • MySQL——分组函数、distinct、分组查询、连接查询、子

    MySQL——分组函数、distinct、分组查询、连接查询、子查询 一、分组函数(聚合函数)1、 会自动忽略空值...

  • SQL进阶部分一

    分组查询 什么是分组查询 ​ 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 分组使用 ​ ...

  • SQL-分组查询

    分组查询 语法: 注意:查询列表必须特殊,要求是分组函数和group by后出现的字段 特点: 分组查询中的筛选条...

  • 数据库分组查询(Group by)

    分组查询命令 -- group by-- having **分组查询中,select后只能跟分组的字段和聚合函数 ...

  • 分组筛选的异同

    语法 特点: GROUP BY后跟分组函数查询的字段 分组可以按单个字段也可以多个字段 案例 分组前查询 查询班级...

  • 数据库高级查询2

    分组查询(group by) 分组查询: 1.查询每个部门的最高工资 select deptno,max(sal)...

  • 数据库基础06分组、关联查询

    分组 分组查询 示例:按部门编号进行分组,查询出各个部门的平均工资 HAVING 句子 HAVING子句用来对分组...

  • 分组查询

    本节课我们会涉及到SELECT下的两个字句,分别是GROUP BY 以及 HAVING 上一节我们学习了聚合函数,...

网友评论

      本文标题:分组查询

      本文链接:https://www.haomeiwen.com/subject/uksjvhtx.html