说明
这个只是本人自己学习时做的笔记,比较基础,希望大佬不喜勿喷。
有需要的小伙伴可以参考一下,只是很基础的笔记。谢谢大家!
基础GroupBy
语法代码:
----------------------------------------------------------------------------------------------------
-- group by子句
--表示分组的含义:根据指定的字段,将数据进行分组,目的是为了统计。
--分组统计
根据班级id分组
select * from my_student group by class; //分组后只会保留每组的第一条
--统计函数:(聚合函数)
count():统计每组中的数量,如果统计目标是字段,那么不统计为null的字段。
avg():求平均值
sum():求和
max():求最大值
min():求最小值
--使用聚合函数:按照班级统计每班人数,最大年龄,最矮的身高,平均年龄。
select class,count(*),max(age),min(height),avg(age) from my_student group by class;
--group_concat:可以将分组中指定的字段进行合并(字符串拼接)
select class,group_concat(name),count(*),max(age),min(height),avg(age) from my_student group by class\G
-- 多分组
将数据安装某个字段进行分组之后,对已经分组的数据再次进行分组。
基本语法:group by 字段1,字段2。安装字段1分完后再按字段2分组。
-- select class,gender,count(*),group_concat(name) from my_student group by class,gender\G
-- 分组排序
按照分组字段进行排序,默认升序。
基本语法:group by 字段【asc|desc】,字段【asc|desc】
班级升序,性别降序
select class,gender,count(*),group_concat(name) from my_student group by class ,gender desc\G
-- 回溯统计
当分组进行多分组之后,
基本语法:group by 字段 【asc|desc】 with rollup;
select class,count(*) from my_student group by class with rollup;
class|count(*)
1 | 3
2 | 3
null| 6
-- 多分组回溯统计
select class, gender,count(*) from my_student group by class,gender;
select class, gender,count(*) from my_student group by class,gender with rollup;
class|gender|count(*)
1 | 男 | 2
1 | 女 | 1
1 | null | 3
2 | 女 | 1
2 | 保密 | 2
2 | 女 | 1
2 | null | 3
null | null | 6
select class, gender,count(*) from my_student group by gender,class with rollup;
排序是按照先后顺序的,从前往后。