zoukankan      html  css  js  c++  java
  • Mysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句系列

    https://www.cnblogs.com/poloyy/category/1683347.html

    前言

    • group by 关键字可以根据一个或多个字段对查询结果进行分组
    • group by 一般都会结合Mysql聚合函数来使用
    • 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where不能与聚合函数联合使用 并且 where 是在 group by 之前执行的

    group by 的语法格式

    GROUP BY  <字段名>[,<字段名>,<字段名>]

    确认测试表里有什么数据,方便后面的栗子做对比

    group by 单字段分组的栗子

    对sex单个字段进行分组查询

    select * from yyTest group by sex;

    知识点

    分组之后,只会返回组内第一条数据;具体原理可以看看下图

    group by 多字段分组的栗子

    先按照age进行分组,然后再在每个组内按department分组

    select * from yyTest group by age,department;

    知识点

    • 多个字段分组查询时,先按照第一个字段分组,如果第一个字段有相同值,则把分组结果再按第二个字段进行分组,以此类推
    • 如果第一个字段每个值都是唯一的,则不会按照第二个字段再进行分组了,具体原理可看下图

    group by + group_concat()的栗子

    group_concat()可以将分组后每个组内的值都显示出来

    select department,group_concat(username) as "部门员工名字" from yyTest group by department;

    可以看到,按department部门分组 ,然后查看每个部门都有哪些员工的名字;还是很便捷的

    group by +聚合函数的栗子

    有什么聚合函数?

    • count():统计记录的条数
    • sum():字段值的总和
    • max():字段值的最大值
    • min():字段值的最小值
    • avg():字段值的平均值

    具体的栗子

    # count统计条数
    select count(*) from yyTest group by department;
    
    # sum总和
    select sum(age) from yyTest group by department;
    
    # max最大值
    select max(age) from yyTest group by department;
    
    # min最小值
    select min(age) from yyTest group by department;
    
    # 平均值
    select avg(age) from yyTest group by department;

    group by + with rollup的栗子

    with rollup用来在所有记录的最后加上一条记录,显示上面所有记录每个字段的总和(不懂的直接看栗子)

    select GROUP_CONCAT(username) from yyTest group by department with rollup;

    select sum(age) from yyTest group by department with rollup;

     

    select count(*) from yyTest group by department with rollup ;

     

  • 相关阅读:
    直接用ISO文件在linux上安装新系统
    vsftpd config备忘
    失恋那回事~~~
    Java之深入JVM(0) 序
    No.6 ThreadLocal类及应用技巧
    Java之多线程(1) Race Condition引起的性能问题
    NO.10 Callable与Future的应用
    NO.5 线程范围内共享变量的概念与作用(二)
    NO.5 线程范围内共享变量的概念与作用(一)
    NO.7多个线程之间共享数据的方式探讨
  • 原文地址:https://www.cnblogs.com/poloyy/p/12868773.html
Copyright © 2011-2022 走看看