文章目录
前言
今天遇到公司新来的小伙伴咨询问题,统计集团内部的在职员工与离职员工数量,如何写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练习生》