SQL筆記四:order by 和group by
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
註意事項: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