一、在SELECT語句中,可以使用集合函數、行集合函數、GROUP BY子句和COMPUTE子句對查詢結果進行統計。GROUP BY子句可與行集合函數或集合函數一起使用,而COMPUTE子句只能與行集合函數一起使用。
在SELECT語句中,也可以單純使用集合函數進行統計,這時它將所有符合條件的數據統計放到一起,形成一行統計數據,這種統計方法叫做標量統計。
例:統計"business"類圖書的平均價格
SELECT 'average price'=AVG(price)
FROM titles
WHERE type='business'
1.GROUP BY子句
GROUP BY子句的語法格式為:
GROUP BY [ALL] aggregate_free_expression
[maggregate_free_expression]...
例:統計每類圖書的平均價格
SELECT type,AVG(price),'average price'
FROM titles
GROUP BY type
2.HAVING子句
在使用GROUP BY子句時,還可以用HAVING子句為分組統計進一步設置統計條件,HAVING子句與GROUP BY子句的關系和WHERE子句與SELECT子句的關系類似。
HAVING子句可以參照選擇列表中的任一項,在HAVING子句中還可以使用邏輯運算符連接多個條件,最多為128個。
例:按圖書類別分組統計出未指定類型以外的其他圖書的平均價格
在HAVING子句中可以使用集合函數。
例:按圖書類別分組統計圖書的平均價格,但排除只包括一種圖書的圖書類別
統計結果排序:
例:按圖書類別統計其平均價格,並按平均價格進行排序
3.GROUP BY子句中的ALL選項
在SELECT語句中同時使用GROUP BY和WHERE子句進行分組統計時,在統計列表中只列出符合WHERE子句所定條件的數據項。
如果在GROUP BY子句中使用ALL選項,則在統計列表中將列出被統計表中所有的分組,即使是不符合WHERE子句指定條件的分組也將列出,但並不對這些分組進行統計。
例:
結果列出了business類圖書,但它並不說明business類圖書的平均價格為空,而是該類圖書不符合統計條件。
使用GROUP BY子句應注意的事項:
(1)在GROUP BY子句中不能使用集合函數。
(2)必須在GROUP BY子句中列出SELECT選擇列表中所有的非集合項。
例:下面語句的GROUP BY子句中必須全部列出type,pub_id列,缺一不可
4.COMPUTE子句
它不僅顯示統計結果,而且還顯示統計數據的細節。
COMPUTE子句的語法格式為:
在COMPUTE子句中使用BY選項可以對數據進行分組統計。
在使用COMPUTE子句時,必須遵守以下規則:
(1)在集合函數中不能使用DISTINCT關鍵字。
(2)COMPUTE BY子句必須與ORDER BY子句聯合使用,並且COMPUTE BY子句中BY後的列名列表必須與ORDER BY子句中的相同,或為其子集,且者從左到右的排列順序必須一致辭。
(3)COMPUTE子句中不使用BY選項時,統計出來的為合計值。
二、利用查詢結果創建新表
SELECT語句中使用INTO選項可以將查詢結果寫進新表中,新表結構與SELECT語句選擇列表中的字段結構相同。
例:
SELECT * INTO #new_publishers
FROM publishers
FROM publishers
WHERE country='USA'