1. 程式人生 > >SQL筆記四:order by 和group by

SQL筆記四:order by 和group by

可能 出現 student sel 排序 字段 條件 count() class

1.order by 排序

使用場景:對查詢的數據結果做一個排序

語法:select 字段A,字段B,...,字段N from...order by 字段A asc(desc),字段Basc(desc),...,字段Nasc(desc)

註意事項:1.需要制定排序規則 asc升序,desc降序,默認為升序;2.多個排序字段的用法是,先按第一個排序字段排序,如果出現數據相同時按照第二個字段排序。

實例:查詢所有學生的數學成績,顯示學生姓名name, 分數, 由高到低

分析過程:

1.查詢涉及到的表:student,grade

2.查詢字段信息:student.name,grade.score

3.關聯條件:student.id=grade.id

4.過濾條件:grade.kemu=‘數學‘ order by score desc

所以最終得到的sql如下:

select

  a.name,b.score

from

  student a,grade b

where

  a.id=b.id

and

  kemu=‘數學‘

order by

   score desc

2.group by 分組查詢

使用場景:根據什麽來分組,一般是根據一個或者多個字段來分組,必須有聚合函數(即對一組執行計算並返回單一值的函數)來配合才能使用。

語法:select 字段A,字段B,...,字段N,聚合函數 from

...group by 字段A,字段B,...,字段N

註意事項:1.查詢信息裏必須有聚合函數,常見的聚合函數有:sum()、count()、avg()、min()、max()等

實例1:統計學生表男女生分別多少人

分析過程:

1.查詢涉及到的表:student

2.查詢字段信息:按男女分組來看多少人,則必須要顯示出:sex和count(*)

3.關聯條件:只需查一個表,無關聯

4.過濾條件:group by sex

所以最終得到的sql如下:

select

  sex,count(*)

from

  student

group by

  sex

實例2:統計每個年級的學生人數(顯示年級名稱,年級id)

分析過程:

1.查詢涉及到的表:student|,class,grade

2.查詢字段信息:grade.id,grade.name,count(*)

3.關聯條件:student.class_id=class.id and class.grade_id=grade.id

4.過濾條件:group by grade.id

所以最終得到的sql如下:

select

  grade.id,grade.name,count(*)

from

  student|,class,grade

where

  student.class_id=class.id and class.grade_id=grade.id

group by

  grade_id

3.一起使用。

使用場景:統計某個或某些個類別分組下的排序

語法:select 字段A,字段B,...,字段N,聚合函數 from...group by 字段A,字段B,...,字段N,order by 字段A asc(desc),字段Basc(desc),...,字段Nasc(desc)

註意事項:1.GROUP BY 和 ORDER BY一起使用時,ORDER BY要在GROUP BY的後面

實例1:統計每個學生的總成績並排序(由於學生可能有重復名字),顯示字段:學生id,姓名,總成績

分析過程:

1.查詢涉及到的表:student a,grade b

還有一個總成績的學生表,這裏需要查詢得到:select b.id,sum(b.score) from grade b group by id

2.查詢字段信息:a.id,a.name,sum(b.score)

3.關聯條件:a.id=c.id

4.過濾條件:order by sum(b.score) desc

所以最終得到的sql如下:

select

  a.id,a.name,c.sum(b.score)

from

  student a,grade b,(select b.id,sum(b.score) from grade b group by id) c

where

  a.id=c.id

order by

  c.sum(b.score) desc

  

SQL筆記四:order by 和group by