系統整理SQL中Group By的用法與Group By多個欄位限制

來源:互聯網
上載者:User
SQL中什麼時候使用Group By?本文詳細講解了Group By的用法,它的簡單的定義就是將一個“資料集”劃分成若干個“小地區”,然後針對若干個“小地區”進行資料處理。Group By中Select指定的欄位限制有哪些?apache php mysql

1、概述

“Group By”從字面意義上理解就是根據“By”指定的規則對資料進行分組,所謂的分組就是將一個“資料集”劃分成若干個“小地區”,然後針對若干個“小地區”進行資料處理。

2、原始表

3、簡單Group By

樣本1

select 類別, sum(數量) as 數量之和from Agroup by 類別

返回結果如下表,實際上就是分類匯總。

4、Group By 和 Order By

樣本2

select 類別, sum(數量) AS 數量之和from Agroup by 類別order by sum(數量) desc

返回結果如下表

在Access中不可以使用“order by 數量之和 desc”,但在SQL Server中則可以。

5、Group By中Select指定的欄位限制

樣本3

select 類別, sum(數量) as 數量之和, 摘要from Agroup by 類別order by 類別 desc

樣本3執行後會提示下錯誤,如。這就是需要注意的一點,在select指定的欄位要麼就要包含在Group By語句的後面,作為分組的依據;要麼就要被包含在彙總函式中。

6、Group By All

樣本4

select 類別, 摘要, sum(數量) as 數量之和from Agroup 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 Agroup 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 Agroup by 類別having sum(數量) > 18

樣本9:Having和Where的聯合使用方法

select 類別, SUM(數量)from Awhere 數量 gt;8group by 類別having SUM(數量) gt; 10

9、Compute 和 Compute By

select * from A where 數量 > 8

執行結果:

樣本10:Compute

select *from Awhere 數量>8compute max(數量),min(數量),avg(數量)

執行結果如下:

compute子句能夠觀察“查詢結果”的資料細節或統計各列資料(如例10中max、min和avg),返回結果由select列表和compute統計結果組成。

樣本11:Compute By

select *from Awhere 數量>8order 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並不支援

相關文章:

sql group by 語句用法

sql group by文法與執行個體

相關視頻:

SQL趣味課堂

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.