group by ,having, 聚合函数的使用

前端之家收集整理的这篇文章主要介绍了group by ,having, 聚合函数的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言: 在此之前对数据库中的group by 和having以及聚合函数一起使用的规则很模糊,今天特意总结了三者之间的使用规则,希望也能帮助到各位。

1:count() max() min() avg() sum() 聚合函数

作用:count() 统计总记录数,max() 取最大值,min()取最小值,avg()取平均值,sum() 总和

例子:select count(sid) from gradewhere cid=3; 查询参加科目编号为3考试的同学总数

select max(scgrade) fromgradewhere cid=1; 查询参加科目编号为1考试的所有同学中的最高分数

select min(scgrade) fromgradewhere cid=1; 查询参加科目编号为1考试的所有同学中的最低分数

select sum(scgrade) fromgradewhere sid=5; 统计参加科目编号为5考试的所有同学分数的总和

select avg(scgrade) fromgradewhere cid=1; 查询参加科目编号为1考试的所有同学中的平均分

讲解:count()括号中的参数适于所有的字段,而后面的四种聚合函数主要是针对数字类型的字段。


2:group by 分组

作用:group by是select语句的从句,用来指定查询分组条件,主要用来对查询的结果进行分组,相同组合的分组条件在 结果集中只显示一行记录

例子:select sid,count(cid) from grade group by sid; 根据分数表(grade)查询出每一个学生(sid 学生编号)共参加了几 科的考试(cid 科目编号);

讲解:group by 后面跟的字段必需是在select 出现的字段 ,且select 后的字段只能为group by 字段和聚合函数


3: having 判断

作用:having子句的作用就是为每一个组指定条件,像where指定条件一样,也就是说,可以根据你指定的 条件来选择行。

例子:select sids from (select sid as sids fromgroupwhere scgrade<60) group by sids having count(sids)>=2; 查询超过两科没及格的学生id

讲解:having必须处在group by子句之后 。


补允:where 和having的区别。

where:where子句在聚合前先筛选记录.也就是说作用在group by 子句和having子句前.

having:having子句在聚合后对组记录进行筛选

原文链接:https://www.f2er.com/javaschema/286779.html

猜你在找的设计模式相关文章