1.分组查询原理
比如:
一个表中又三个学期的人数考试信息,现在我们要查询每个学期的人数,这时我们用select----from---where会产生代码冗余,也就是我们通常说的垃圾代码,这个时候我们就会用到group by 关键字。
2.单列分组查询
语法: eg:
select 列名,聚合函数 from 表名 select count(*)as 人数,grade as 年级
where 限制条件 from Student
group by 被分组的列 group by grade
order by 列名
注意:
select表中只能包含:
(1)被分组的列
(2)为每个分组返回一个值的表达式,如聚合函数
3.多列分组查询
语法: eg:
select 列名1,列名2,聚合函数 from 表名 select count(*) as 人数,grade as 年级,sex as 性别
where 限制条件 from Student
group by 被分组的列名1,列名2 group by grade,sex
order by 被排序的列名 order by----
注意:
(1)单列查询不需要 order by 多列查询尽量添加 order by
(2)多列查询分组排序,默认情况以后边一个进行排序
4.分组筛选(having):
语法: eg:
select -----from 表名 select count(*) as 人数,grade as 年级
where ------ from Student
group by ------ group by grade
having ------- having count(*)>15
5.如何获得总人数超过15人的年级,地址中含有上海
select count(*) as 人数,grade as 年级 from Student
where address like'%上海%'
group by grade
having count(*)>15
6.where和having的区别:
(1)位置:
2.GROUP BY 子句用来分组 WHERE 子句的输出。
3.HAVING 子句用来从分组的结果中筛选行