您现在的位置是:首页 >学无止境 >mysql中sql语句之分组(group by)网站首页学无止境

mysql中sql语句之分组(group by)

ybb_ymm 2024-08-20 00:01:02
简介mysql中sql语句之分组(group by)

前言

今天遇到公司新来的小伙伴咨询问题,统计集团内部的在职员工与离职员工数量,如何写sql统计。

这个问题其实还是比较容易来实现,首先想到的就是分组(group by)以及count函数来实现,这里面也会用到case when语句的一些知识。

接下来,我们进入正题

分组查询

定义

分组查询:就是将我们要查询结果按照指定字段进行分组,字段中数据相等的分为一组。

语法

GROUP BY column_name [HAVING 条 件 表 达 式] [WITH ROLLUP]

说明

1、column_name : 是指按照指定字段的值进行分组规则。
2、HAVING 条 件 表 达 式: 用来进行过滤分组后的数据。
3、WITH ROLLUP:在所有记录的最后加上一条记录,显示select查询时聚合函数的统计和计算结果

group by使用

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

group by + group_concat()的使用

group_concat(column_name): 统计每个分组指定字段的信息集合,每个信息之间使用逗号进行分割

-- 根据isv_no字段进行分组,查询isv_no字段和分组的state字段信息
select isv_no,group_concat(state) from t_mch_info group by isv_no;

结果如下:
在这里插入图片描述

group by + 聚合函数的使用

-- 统计isv_no下有多少条数据
select isv_no,count(state) from t_mch_info group by isv_no;

group by + having的使用

having他的作用和where有类似功能,都是用来过滤数据的,但having是过滤分组数据的,只能用于group by

-- 用来统计isv_no下有数据条数大于3的
select isv_no,count(state) from t_mch_info group by isv_no HAVING count(state)>3;

group by + with rollup的使用

with rollup他的作用是:在最后记录后面新增一行,显示select查询时聚合函数的统计结果和计算结果

select isv_no,count(state) from t_mch_info group by isv_no with rollup;

结果如下:
在这里插入图片描述

分组查询小结

1、group by:他是根据指定的一个或者多个字段对数据进行分组操作;
2、group_concat(column):这个函数是统计每个分组指定的字段的信息集合;
3、group by:它在和聚合函数结合使用的时候, 聚合函数统计和计算的是每个分组的数据项;
4、having:是对分组的数据结果,进行条件过滤;
5、with rollup:他是指在最后记录后面新增一行,用来显示select查询时聚合函数的统计和计算结果值;

欢迎大家点击下方卡片,关注《coder练习生》

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。