使用Compute by子句和行統計函數(count,sum,max,avg,min等),可以統計排序中結果完全相同的列,統計值作為查詢結果以附加行的形式顯示,
文法:Compute avg|count|max|min|sum by 運算式
1、舉一個例子
比如有一個資料表:表名為person,三個欄位分別為 name,age,country
select name,country,age from person where ?? order by a compute sum(age),max(age),min(age) by country
這個語句在查詢時將資料按照country分組,然後分別顯示每組的詳細資料和統計資訊。結果可能如下:
name country age
張三 中國 16
李四 中國 21
王五 中國 24
sum max min
61 24 16
=================================
name country age
泰森 美國 20
布希 美國 24
蓋茨 美國 25
sum max min
69 25 20
=============================================
name country age
妓子 日本 12
完犢子 日本 14
豬生逆子 日本 15
sum max min
41 15 12
我們很容易看出她其實是在一個查詢結果中包含了三個子查詢(根據country不同而分的組),每個子查詢又包含兩個子查詢(一個是詳細資料,一個是統計資訊)
2、compute by 子句的規則:
(1)不能將distinct與行統計函數一起使用
(2)compute ??? by 子句中 ???出的列必須出現在挑選清單中
(3)不能在含有compute by 子句的語句中使用select into 子句,因為包括compute 子句的語句會產生不規則的行。
(4)如果使用了compute by子句,則必須使用order by 子句, 而且compute by子句中的列必須包含在order by 子句中,並且對列的前後順序和起始項都要一致(說白了compute by子句中的列必須是order by子句中列表的全部,或者前邊的連續幾個)。
(5)如果compute 省略了 by ,則order by 也可以省略
(6)如果compute by 子句包含多列時,會將一個組(第一個列分的組)分成若干個子組(利用後面的列),並對每層子組進行統計。
(7)使用多個compute by子句時,會分別按不同的組統計出結果。詳細資料還是按照正常的第一個分組方式顯示。
(8)compute by 子句中可以使用多個統計函數,他們互不影響
(9)compute by 子句中可以不包含by ,而只用compute 此時不對前面資訊分組,而只對全部資訊進行統計。