sql server——分组查询
sql server里分組查詢通常用于配合聚合函數(shù),達到分類匯總統(tǒng)計的信息。而其分類匯總的本質實際上就是先將信息排序,排序后相同類別的信息會聚在一起,然后通過需求進行統(tǒng)計計算。
?使用Group BY 進行分組查詢
--查詢男女生的人數(shù)
?在沒有學習分組查詢之前,我們可以安裝常規(guī)的思路解決查詢需求:
?select count(*) from person where sex='男'
?select count(*) from person?where sex='女'
?那么現(xiàn)在又要個需要時,查詢每個班級的總人數(shù)
如果按照常規(guī)解決查詢,那么我們應該思考的是:
1.每個班級,我們并不知道在表里有哪些班級,那么我們where 后的條件如何寫?
2.如果該表里有1000個班組,那么我難道要寫一千條where查詢語句?
面對這樣的問題 sql server為我們準備了Group by 關鍵字實現(xiàn)分組查詢
?在使用介紹Group by關鍵字之前,我們先來看看系統(tǒng)實現(xiàn)分組查詢的原理和邏輯:
?
映射成SQL語句:
select sex ,count(*) as 人數(shù) from Person group by sex這個簡短的語句,經過上圖的原理,應該要知道,第一步是先from查詢表的所有信息,然后group by根據(jù)字段進行分組后在統(tǒng)計匯總
?上面的案例是通過Count()函數(shù)進行統(tǒng)計,當然分組匯總還可以使用其他的聚合函數(shù)進行匯總。
ps:為了保證完整性,系統(tǒng)約定俗成,在使用了聚合函數(shù)的查詢語句中,除了聚合函數(shù),可以在查詢列表上,要出現(xiàn)其他字段,那么該字段就必須為分組字段,而且該字段一定要跟隨在GROUP BY關鍵字后面。
?
?
多列分組查詢
?
--實例需求,查詢每一個班組,男女生的人數(shù)
分析:顯然需求是兩組,每一個班需要劃分組,男女也需要分組
實現(xiàn)圖解:
SQL語句:
select TeamID,sex,COUNT(*) from student group by TeamID,Sex order by TeamID經驗:搞清楚需要分幾組,搞清楚分組的順序,一輪一輪的分,系統(tǒng)是等分組之后才會進行匯總信息
?
使用HAVING子句
?
演示示例:--查詢每一個班級男女生的人數(shù),同時只需要顯示人數(shù)數(shù)量超過1人的記錄
分析:此查詢顯然是對上一個示例的多列分組進行篩選。
?試在這學的知識范圍內來解決此查詢需求。。。。
解決辦法,使用HAVING關鍵字:
HAVING核心:是對分組統(tǒng)計之后的結果集,進行數(shù)據(jù)的篩選
SQL語句:
select TeamId,sex,COUNT(*) as renshu from Person group by TeamId,Sex having count(*)>=1 order by TeamId?
where和having的不同:where是對原始數(shù)據(jù)進行篩選,having是對分組時候的數(shù)據(jù)進行篩選
?
?
查詢語句的執(zhí)行順序
在這里引出查詢機制里對查詢語句里的關鍵字的執(zhí)行順序
?
查詢關鍵字家族成員
select top/distinct 字段列表 from 表列表 where 篩選條件 group by 分組字段列表 having 對分組之后得到的結果集篩選 order by 排序字段列表?
?
執(zhí)行順序:
1.from
2.where
3.group by
4.having
5.根據(jù)select 關鍵之后的要顯示的字段,進行結果集顯示
6.order by 對最終結果集進行排序
7.top/dictinct
總結
以上是生活随笔為你收集整理的sql server——分组查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各厂商网络设备取消分屏显示
- 下一篇: 关于InfiniBand几个基本知识点解