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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34629352/article/details/83653452

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

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

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

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

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

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

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

                   select avg(scgrade) from grade where 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 from group where scgrade<60) group by sids having                                              count(sids)>=2;   查询超过两科没及格的学生id

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

                补允:where 和having的区别。

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

                      having:having子句在聚合后对组记录进行筛选
--------------------- 
作者:christine_ruan 
来源:CSDN 
原文:https://blog.csdn.net/christine_ruan/article/details/7569782 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_34629352/article/details/83653452