程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 詳解SQL中Group By的用法

詳解SQL中Group By的用法

編輯:MSSQL

詳解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其實不支撐

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved