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子句在聚合后对组记录进行筛选

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...