加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql常用sql语句(12)- group by 分组查询

发布时间:2020-12-12 02:13:31 所属栏目:MySql教程 来源:网络整理
导读:测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html ? 前言 group by 关键字可以根据一个或多个字段对查询结果进行分组 group by 一般都会 结合Mysql聚合函数 来使用 如果需要指定条件来过滤分组后的结果集,需要结合? h

测试必备的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分组

by age,department;

知识点

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

?

group by + group_concat()的栗子

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

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

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

?

group by +聚合函数的栗子

有什么聚合函数?

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

?

具体的栗子

# count统计条数
select count(*) by department;

# sum总和
sum(age)  department;

# max最大值
max(age)  department;

# min最小值
min(age)  department;

# 平均值
avg(age) by department;

?

group by + with rollup的栗子

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

select GROUP_CONCAT(username) by department with rollup;

with rollup;

?

with rollup ;

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读