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