以前,自己總是記不住如何用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 字段,最最后,對已得的數據進行排序
所以執行順序依次是:
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,然后根據StudentName排序,在此基礎上再根據LessonName排序,在以上基礎上再根據Result進行升序排序
another:

他的執行順序是先執行篩選出LessonName=’語文’的,根據StudentName進行分組,在以分組基礎上篩選Result之和大於7的數據,然后就是從已得數據集中select StudentName,SUM(Result) as ResultField,然后最后數據集根據總分大小升序排列
這里面呢,其他的都挺簡單,值得注意的是group by的用法:
也就是說,我們從select里面展示的字段都是要用來分組的依據,如果是:

重:下面說一下having和where的用法區別:
1.having只能用在group by之后,對分組后的結果進行篩選(即使用having的前提條件是分組)。
2.where肯定在group by 之前,即也在having之前。
3.where后的條件表達式里不允許使用聚合函數,而having可以。
