您现在的位置:首页 > 博客 > SQL > 正文
sql篇 select from where group by having order by
http://www.bbnsc.com/      2018/11/30 22:01:37      来源:贝恩斯      点击:

前,自己总是记不住如何用group by,如何用order by,什么时候用group by,什么时候用order by,什么时候两者一起用,怎么用,谁先谁后,现在,我们就一起来说一下Select   from   where   groupby   having   order by 的那些事,简单的总结一下,加深一下自己的印象,也给有需要的人提供点资源

        Select   from   where   groupby   having   order by ,不用说,select from肯定是一起的,然后是where,然后是group by,having的前提是先分组,所以跟着group by,来的是分组之后的筛选条件。最后是从艺的数据集中select 字段,最最后,对已得的数据进行排序 

所以执行顺序依次是:

[sql] view plain copy
 
  1. from  
  2. Where  
  3. Group by  
  4. Having
  5. Select  
  6. Order by

1.执行where xx对全表数据做筛选,返回第1个结果集。 
2.针对第1个结果集使用group by分组,返回第2个结果集。 
3.针对第2个结集执行having xx进行筛选,返回第3个结果集。
4针对第3个结果集中的每1组数据执行select xx,有几组就执行几次,返回第4个结果集。 
5.针对第4个结果集排序
       其实说起来,我们的sql语句主要就是这几个加上一些聚合函数,嵌套用法什么的,在有一些什么case when语句,下面来个更形象的图文并茂

 数据源:

           

 先来一个比较另类的、简单的,组内排序


Select StudentName,LessonName,Result  from TestTable order byStudentName,LessonName,Result


      

       先执行Select StudentName,LessonName,Result from TestTable,然后根据StudentName排序,在此基础上再根据LessonName排序,在以上基础上再根据Result进行升序排序

another: 

select StudentName,SUM(Result) asResultField from TestTable where LessonName='语文' GROUP BYStudentName HAVING SUM(Result)>7 ORDER BY ResultField

        
        他的执行顺序是先执行筛选出LessonName=’语文’的,根据StudentName进行分组,在以分组基础上筛选Result之和大于7的数据,然后就是从已得数据集中select StudentName,SUM(Result) as ResultField,然后最后数据集根据总分大小升序排列

 这里面呢,其他的都挺简单,值得注意的是group by的用法: 

select 列a,聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a ;  

select 列a,列b 聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a , 列b

也就是说,我们从select里面展示的字段都是要用来分组的依据,如果是:

select 列a,列b 聚合函数(聚合函数规范) from 表明 where 过滤条件 group by 列a   

 

重:下面说一下having和where的用法区别:         

      1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。         

      2.where肯定在group by 之前,即也在having之前。         

      3.where后的条件表达式里不允许使用聚合函数,而having可以。

发表评论(0)
姓名 *
评论内容 *
验证码 *图片看不清?点击重新得到验证码