SQL的聚合函数及分组查询
短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
SQL的聚合函数及分组查询
要在这个世界上获得成功,就必须坚持到底:至死都不能放手。
count
select count(*) from students #底层优化了
select count(1) from students #效果和*一样
select count(age) from emp #慢,只统计非NULL的
max / min
select max(score) max from scores #求该字段的最大值
select min(score) min from scores #获取该字段的最小值
select class,max(score) from scores group by class #配合分组使用
sum / avg
select sum(score) from scores #求和
select avg(score) from scores #求平均数
分组 group by
- 用于对查询的结果进行分组统计
- group by表示分组,
- having 子句类似where过滤返回的结果
select class,max(score) from scores group by class #聚合函数配合分组使用
这里的意思是从scores表中,查询班级class和最高成绩,按班级分组。
报错句分析:
Invalid use of group function
#select class,max(score) FROM scores where max(score) > 80 GROUP BY class;
先过滤再分组是高效的,但where中不能使用聚合函数,所以这里我们应该使用having子句。
select class,max(score) FROM scores GROUP BY class having max(score) > 80;
注意:这里是先查询分组完后,再执行having子句的过滤条件。
总结:
-
where 子句的作用是对查询结果进行分组前,将不符合where条件的数据去掉,即在分组之前过滤数据,where条件中不能使用聚合函数过滤出特定的数据。
-
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组,但要注意,having中使用的过滤条件必须是查到的结果。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341