sql server——分組查詢(方法和思想)

來源:互聯網
上載者:User

標籤:

思想

先排序在匯總

sql server裡分組查詢通常用於配合彙總函式,達到分類匯總統計的資訊。而其分類匯總的本質實際上就是先將資訊排序,排序後相同類別的資訊會聚在一起,然後通過需求進行統計計算。

 

 

 

使用GROUP BY進行分組查詢

 

執行個體示範

 

--查詢男女生的人數

 

 在沒有學習分組查詢之前,我們可以安裝常規的思路解決查詢需求:

 

select count(*) from student where sex=‘男‘

 

select count(*) from student where sex=‘女‘

 

那麼現在又要個需要時,查詢每個班級的總人數

如果按照常規解決查詢,那麼我們應該思考的是:

1.每個班級,我們並不知道在表裡有哪些班級,那麼我們where 後的條件如何寫?

2.如果該表裡有1000個班級,那麼我難道要寫一千條where查詢語句?

面對這樣的問題 sql server為我們準備了Group by 關鍵字實現分組查詢

 

在使用介紹Group by關鍵字之前,我們先來看看系統實現分組查詢的原理和邏輯:

 

映射成SQL語句:

select sex ,count(*)  as 人數  from student group by sex

這個簡短的語句,經過的原理,應該要知道,第一步是先from查詢表的所有資訊,然後group by根據欄位進行分組後在統計匯總

 

上面的案例是通過Count()函數進行統計,當然分組匯總還可以使用其他的彙總函式進行匯總。

 

 

使用GROUP BY 語句注意事項一:

 

圖中使用查詢語句,包含一個欄位和一個彙總函式為什麼會報錯呢?

原因,我們把兩個欄位分開來查詢:

 

總結:為了保證完整性,系統約定俗成,在使用了彙總函式的查詢語句中,除了彙總函式,可以在查詢列表上,要出現其他欄位,那麼該欄位就必須為分組欄位,而且該欄位一定要跟隨在GROUP BY關鍵字後面。

    與彙總函式一起出現在select後面進行查詢的列,只有兩種可能性:被彙總 、被分組

 

 

 

 

 

多列分組查詢

 

--執行個體需求,查詢每一個班級,男女生的人數

分析:顯然需求是兩組,每一個班需要劃分組,男女也需要分組

實現圖解:

SQL語句:

select  GradeId,sex,COUNT(*)  from student group by GradeId,Sex order by GradeId

經驗:搞清楚需要分幾組,搞清楚分組的順序,一輪一輪的分,系統是等分組之後才會進行匯總資訊

 

 

 

 

使用HAVING子句

 

示範樣本:--查詢每一個班級男女生的人數,同時只需要顯示人數數量超過3人的記錄

分析:此查詢顯然是對上一個樣本的多列分組進行篩選。

 

試在這學的知識範圍內來解決此查詢需求。。。。

 

一、那麼就按照我們學的where來進行篩選

結果

這個錯誤告訴了我們:where裡面不能出現彙總函式作為條件,失敗!

 

 

 

二、既然不能使用彙總函式,那就給彙總函式取一個別名,讓它當做一個列

結果

錯誤原因:原因是where是對來源資料進行篩選的,也就是對from 後面的表進行篩選,既然是來源資料,那麼where去來源資料表裡找一個別名欄位,怎麼可能會有!所以才會報錯

 

 

讓我們來探討一下,這裡為什麼不能使用where

1.需求是對分組之後的資料集進行篩選,where只針對資料表未經處理資料篩選

2.where關鍵字顯然只能出現一次,而且根據查詢的順序,是先執行where條件式篩選後得到的結果集,在進行的group by分組

 

 

 

解決辦法,使用HAVING關鍵字:

HAVING核心:是對分組統計之後的結果集,進行資料的篩選

SQL語句:

select  GradeId,sex,COUNT(*)  as renshu from student  group by GradeId,Sex  having count(*)>=3 order by GradeId

 

where和having的不同:where是對未經處理資料進行篩選,having是對分組時候的資料進行篩選

 

 

 

查詢語句的執行順序

在這裡引出查詢機制裡對查詢語句裡的關鍵字的執行順序

 

查詢關鍵字家族成員

select  top/distinct 欄位列表 from 表列表 where 篩選條件 group by 分組欄位列表 having  對分組之後得到的結果集篩選  order by 排序欄位列表

 

 

執行順序:

1.from

2.where

3.group by

4.having

5.根據select 關鍵之後的要顯示的欄位,進行結果集顯示

6.order by 對最終結果集進行排序

7.top/dictinct

 

 

 

sql server——分組查詢(方法和思想)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.