詳解SQL中Group By的用法。本站提示廣大學習愛好者:(詳解SQL中Group By的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解SQL中Group By的用法正文
GROUP BY 語句用於聯合算計函數,依據一個或多個列對成果集停止分組。
1、概述
“Group By”從字面意義上懂得就是依據“By”指定的規矩對數據停止分組,所謂的分組就是將一個“數據集”劃分紅若干個“小區域”,然後針對若干個“小區域”停止數據處置。
2、原始表
3、簡略Group By
示例1
select 種別, sum(數目) as 數目之和 from A group by 種別
前往成果以下表,現實上就是分類匯總。
4、Group By 和 Order By
示例2
select 種別, sum(數目) AS 數目之和 from A group by 種別 order by sum(數目) desc
前往成果以下表
在Access中弗成以應用“order by 數目之和 desc”,但在SQL Server中則可以。
5、Group By中Select指定的字段限制
示例3
select 種別, sum(數目) as 數目之和, 摘要 from A group by 種別 order by 種別 desc
示例3履行後會提醒下毛病,以下圖。這就是須要留意的一點,在select指定的字段要末就要包括在Group By語句的前面,作為分組的根據;要末就要被包括在聚合函數中。
6、Group By All
示例4
select 種別, 摘要, sum(數目) as 數目之和 from A group by all 種別, 摘要
示例4中則可以指定“摘要”字段,其緣由在於“多列分組”中包括了“摘要字段”,其履行成果以下表
“多列分組”現實上就是就是依照多列(種別+摘要)歸並後的值停止分組,示例4中可以看到“a, a2001, 13”為“a, a2001, 11”和“a, a2001, 2”兩筆記錄的歸並。
SQL Server中固然支撐“group by all”,但Microsoft SQL Server 的將來版本中將刪除 GROUP BY ALL,防止在新的開辟任務中應用 GROUP BY ALL。Access中是不支撐“Group By All”的,但Access中異樣支撐多列分組,上述SQL Server中的SQL在Access可以寫成
select 種別, 摘要, sum(數目) AS 數目之和 from A group by 種別, 摘要
7、Group By與聚合函數
在示例3中提到group by語句中select指定的字段必需是“分組根據字段”,其他字段若想湧現在select中則必需包括在聚合函數中,罕見的聚合函數以下表:
函數
感化
支撐性
sum(列名)
乞降
max(列名)
最年夜值
min(列名)
最小值
avg(列名)
均勻值
first(列名)
第一筆記錄
僅Access支撐
last(列名)
最初一筆記錄
僅Access支撐
count(列名)
統計記載數
留意和count(*)的差別
示例5:求各組均勻值
select 種別, avg(數目) AS 均勻值 from A group by 種別;
示例6:求各組記載數量
select 種別, count(*) AS 記載數 from A group by 種別;
示例7:求各組記載數量
8、Having與Where的差別
•where 子句的感化是在對查詢成果停止分組前,將不相符where前提的行去失落,即在分組之前過濾數據,where前提中不克不及包括聚組函數,應用where前提過濾出特定的行。
•having 子句的感化是挑選知足前提的組,即在分組以後過濾數據,前提中常常包括聚組函數,應用having 前提過濾出特定的組,也能夠應用多個分組尺度停止分組。
示例8
select 種別, sum(數目) as 數目之和 from A
group by 種別
having sum(數目) > 18
示例9:Having和Where的結合應用辦法
select 種別, SUM(數目)from A
where 數目 gt;8
group by 種別
having SUM(數目) gt; 10
9、Compute 和 Compute By
select * from A where 數目 > 8
履行成果:
示例10:Compute
select *from A where 數目>8 ompute max(數目),min(數目),avg(數目)
履行成果以下:
compute子句可以或許不雅察“查詢成果”的數據細節或統計各列數據(如例10中max、min和avg),前往成果由select列表和compute統計成果構成。
示例11:Compute By
select *from A where 數目>8 order by 種別 compute max(數目),min(數目),avg(數目) by 種別
履行成果以下:
示例11與示例10比擬多了“order by 種別”和“... by 種別”,示例10的履行成果現實是依照分組(a、b、c)停止了顯示,每組都是由改組數據列表和改組數統計成果構成,別的:
•compute子句必需與order by子句用一路應用
•compute...by與group by比擬,group by 只能獲得各組數據的統計成果,而不克不及看到各組數據
在現實開辟中compute與compute by的感化其實不是很年夜,SQL Server支撐compute和compute by,而Access其實不支撐