sql之分组
分组
-
按照哪一类进行分组,关键词group by;
-
通俗一点,就是把某一些满足设定条件的数据按某种规则进行合并
-
创建表
create table student (id int not null, name1 varchar(30), grade varchar(30), salary varchar(30)) insert into student values(1,'zhangsan','A',1500); insert into student values(2,'lisi','B',3000); insert into student values(1,'zhangsan','A',1500); insert into student values(4,'qianwu','A',3500); insert into student values(3,'zhaoliu','C',2000); insert into student values(1,'huyifei','D',2500);
-
单个字段分组:例如把成绩相同的分为一组
select name1,grade from student group by grade
-
多个字段分组:比如按名字和成绩分组,如果名字和成绩同时相同可以分成一组,如果名字一样,grade不同,就不能分为一组。
select name1,grade from student group by name1,salary;
select name1,grade from student group by name1,grade;
-
和聚合函数一起搭配
-
sum求和:把名字相同人归为一类,并求每一类工资的综合,每条目显示名字,和工资总数。
select name1 , sum(salary) from student group by name1
-
avg求平均:把名字和成绩相同的归为一类,并求每一类工资的平均数,显示每一类名字和工资平均数
select name1 , avg(salary) from student group by name1,grade
-
max函数:把成绩相同的归为一类,并求每一类中工资最高的,显示每一类成绩和最高工资那一项
select grade , max(salary) from student group by grade
-
min函数: 把成绩相同的归为一类,并求每一类中工资最低的,显示每一类成绩和最低工资那一项
select grade , min(salary) from student group by grade
-
-
和having搭配
-
having是对组进行限制,where对单个数据进行限制
-
如果有where,group b,having时,顺序为where,group by,最后having句子
create TABLE Table1 (ID int primary key NOT NULL, classid int, sex varchar(10), age int) Insert into Table1 (classid,sex,age) values(1,'男',20),(2,'女',22),(3,'男',23),(4,'男',22),(1,'男',24),(2,'女',19),(4,'男',26),(1,'男',24) ,(1,'男',20),(2,'女',22),(3,'男',23),(4,'男',22),(1,'男',24),(2,'女',19);
-
查询每个班级中年龄大于20性别为男的人数:先筛选性别为男的人,然后将班级和年龄一样各自聚在一起,然后筛选出年龄大于20的那些组。
select COUNT(*)as '>20岁人数',classid from Table1 where sex='男' group by classid,age having age>20
-
-
-