SQL學習之分組數據Group by

簡介:"Group By"根據字面上的意思理解,就是根據"By"後面指定的規則對數據進行分組(分組就是將一個數據集按照"By"指定的規則分紅若干個子數據集),而後再對子數據集進行數據處理。sql

一、下面經過一個實例來了解"Group By"的做用和功能,代碼以下:函數

select * from course

這是一個課程明細表,如今有一個報表程序,須要每一個老師的編號,以及每位老師所教的課程總數,下面是解決代碼:spa

select tno,COUNT(cname) as courses from course group by tno

這就是我的的理解,上圖是經過Group By分組以後的第一組,後面的數據集合包含教師ID爲t001的全部行數數據,這個數據集合咱們可使用匯集函數來獲取咱們想要的信息,可是沒法獲取其中的詳細的列信息!緣由咱們能夠經過上圖的結構能夠看出!code

ok,經過group by 完成需求!blog

上面的Select指定了兩個列,tno包含教師的編號,courses 爲計算字段(用Count()函數創建),group by子句指示DBMS按tno排序並分組數據。這就會對每一個tno而不是整個表計算courses一次(也就是說DBMS會對(按照tno排序並分組以後的單個數據子集)進行Count()運算,而不是真個數據集)。排序

 

二、下面是使用Group By子句須要知道的一些重要的規定class

(1)Group By子句能夠包含任意數目的列,於是能夠對分組進行嵌套,進行更細緻的分組。select

(2)Group By子句中列出的每一列都必須是檢索列(或者有效的表達式,注意不能是彙集函數)。若是在SELECT中使用了檢索列(或者表達式),則在Group By子句中使用相同的表達式,不能使用別名。數據類型

(3)大多數SQL不容許Group By帶有可變長度的數據類型(如文本,text類型)。程序

(4)除彙集計算語句外,SELECT語句中的每一列都必須在Group By中給出。

(5)若是分組列中包含具備Null值的行,則Null將做爲一個分組返回,若是列中有多行Null,他們將做爲一個分組返回。

(6)Group By必須出如今Where子句以後,Order By子句以前。

(7)若是在Group By子句中嵌套了分組,數據將在最後指定的分組上進行彙總。換句話說,在創建分組時,指定的全部列都一塊兒計算(不能從個別的列中取回數據)。

 

三、Group By All+多個字段,Group By+多個字段

在SQL Server 中Group By All+多個字段和Group By+多個字段在效果是同樣的,都是經過多個字段來分組!以下代碼:

select * from course

這是一個課程明細表,如今有個報表程序須要展現每一個老師教授的課程(相同的課程)一共教多少個班級,下面是解決代碼:

select tno,cname,COUNT(cname) from course group by all tno,cname order by tno

這是我的的理解,上圖是經過Group By分組以後的第一組,後面的數據集合包含(教師ID爲t001而且課程名稱爲Oracle)的全部行數數據,這個數據集合咱們可使用匯集函數來獲取咱們想要的信息,可是沒法獲取其中的詳細的列信息!緣由咱們能夠經過上圖的結構能夠看出!

ok,解決需求,經過上面的結果圖,咱們能夠看出,三個老師所教的課程基本都只教一個班,除了t003老師的sql SERVER 2005教了兩個班,固然咱們實際的業務中,並不會這樣建表,我這邊指示爲了演示Group By+多個字段能完成的功能,才強行構建這個需求!

相關文章
相關標籤/搜索