1、数据分组(GROUP BY):
SQL中数据可以按列名分组,搭配聚合函数十分实用。
例如有这样一个表:
统计每个班上20岁以上的学生人数:
SELECT student_class,COUNT(student_name) AS 总人数 FROM t_student WHERE student_age >20 GROUP BY (student_class);
我们再来看一个例子:
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
(1)首先是where 和 group by 搭配:
用一条SQL语句 查询课程成绩大于90分的学生姓名
通常我们会这么写:
select name from table where fenshu > 90
而实际上我们还可以使用group by进行分组:
select name from table where fenshu>90 group by kecheng
当然这里分组好像没有什么实际作用,例子没举好,但这不是重点,
重点是,使用where和group分组时:顺序应该为 where过滤 -> group by分组 -> min(聚合函数,如果有的话)
因为这种搭配描述的是: 用where来实现满足过滤条件再聚合。
(2)再来看 having 和 group by 搭配:
用一条SQL 语句 查询出每门课都大于80 分的学生姓名
select name from table group by name having min(fenshu)>80
注意: 这里不能使用where,因为使用where顺序应该为 where过滤 -> group by分组 -> min(聚合函数)
即 select name from table where min(fenshu)>80 group by name 这显然是不对的。
而使用having,则顺序为 group by分组 -> having过滤 -> min(聚合函数)
这样就达到聚合之后实现过滤的效果。