詳解SQL中Group By的使用教程_數據庫其它

來源:腳本之家  責任編輯:小易  

group by 分組 必須是在一對多的條件下比如說 姓名字段 成績字段A 80A 90B 86B 90這樣就可以分組 姓名字段 而 成績必須用聚合函數因為你姓名已被分組查詢完就是一個值了`成績也必須是having 是分組篩選 必須和 group by 一起用如`以上面的字段做例子select 姓名,avg(成績)from 表名group by 姓名having avg(成績)>80查詢的平均成績大于80www.anxorj.tw防采集請勿采集本網。

1、概述

SQL Select語句完整的執行zd順序: 1、from子句組裝來自不同數據內源的數據;2、where子句基于指定的條件對記錄行進行篩選;3、group by子句將數據劃分為多個分組;4、使用聚集函數進行計算;5、

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

一、group by all語法解析: 如果使用 ALL 關鍵字,那么查詢結果將包括由 GROUP BY 子句產生的所有組,即使某些組沒有符合搜索條件的行。沒有 ALL 關鍵字,包含 GROUP BY 子句的 SELECT 語句將不顯示沒有

2、原始表

group by 的意思為分組匯總。使用了group by 后,要求Select出的結果字段都是可匯總的,否則就會出錯。比如,有:{學號,姓名,性別,年齡,成績}字段 這樣寫: SELECT 學號,姓名,性別,年齡,

3、簡單Group By示例1

語句中有group by的話,說明是進行分組聚合查詢,因此select后的屬性只能是group by后面的分組屬性和在其它字段上的聚合函數結果(avg平均值,sum求和,count計數等),而order by后的屬性也必須

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

@invoiceNO,@invoicePrefix 這兩個是外部變量,變量中不能放在group by中的。group 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的使用教程,希望對大家有所幫助!

Group By 子句是將查詢結果按某一列或多列的值分組的,值相等的為一組。所以你想分出結果的哪組都行啊,只要是你查詢的使用having短語是為了指定篩選條件,即從Group by所分出來的分組結果中進行篩選則having后面可以加條件如:select snofrom scgroup by snohaving count(*)>3內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • 淺談sql語句中group by 和 having的使用方法
  • 簡單講解sql語句中的group by的使用方法
  • mysql中錯誤使用sql語句groupby被兼容的情況
  • mysql使用group by分組實現取前n條記錄的方法
  • mysql高級查詢之與group by集合使用介紹
  • 使用mysql的disctinct group by查詢不重復記錄
  • 解決mongovue的collections數據不顯示的問題
  • sql數據庫與oracle數據庫鏡像有什么不同對比
  • oledb和odbc的區別(優缺點)
  • 一個多表查詢的sql語句
  • 數據庫刪除完全重復和部分關鍵字段重復的記錄
  • mssql轉mysql的一些記錄
  • 數據庫修改多對多的中間表的記錄的技巧
  • sql中is not null與!=null的區別
  • 數據庫設計的完整性約束表現在哪些方面
  • 如何讓sql運行得更快
  • SQL中Group By 用法
  • 求詳解SQL中GROUP BY的用處。。
  • sql 關于 count(*)和 group by 的用法
  • SQL中where和group by可以連用嗎?having算是對檢索條件的補充嗎?
  • SQL的執行順序,如:( Select,From,Where Group By , Order By)如何的順序
  • SQL中where和group by可以連用嗎?having算是對檢索條件的補充嗎?
  • SQL語句select * from 表名 group by 列名--不是 GROUP BY 表達式
  • sqlserver2008,sql編程,group by 用法
  • SQL: 每個 GROUP BY 表達式必須至少包含一個不是外部引用的列。
  • 數據庫中,select where group by having 執行順序
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁數據庫其它淺談sql語句中group by 和 having的使用方法簡單講解sql語句中的group by的使用方法mysql中錯誤使用sql語句groupby被兼容的情況mysql使用group by分組實現取前n條記錄的方法mysql高級查詢之與group by集合使用介紹使用mysql的disctinct group by查詢不重復記錄解決mongovue的collections數據不顯示的問題sql數據庫與oracle數據庫鏡像有什么不同對比oledb和odbc的區別(優缺點)一個多表查詢的sql語句數據庫刪除完全重復和部分關鍵字段重復的記錄mssql轉mysql的一些記錄數據庫修改多對多的中間表的記錄的技巧sql中is not null與!=null的區別數據庫設計的完整性約束表現在哪些方面如何讓sql運行得更快sql join on 用法mysql mysqldump命令使用詳解sqlserver、mysql、oracle三種數sql中代替like語句的另一種寫法如何讓sql運行得更快關于adox的相關知識如何取得一個表的所有字段名用逗sql server下數據庫鏈接的使用方sql server 2005的表分區sql 查詢語句積累update 子查詢使用介紹sql注入之新手入門示例詳解200行代碼輕松實現一個簡單的區塊鏈問個高難度的復雜查詢(在一個時間段內的間14張圖看懂什么是區塊鏈技術遠程數據庫的表超過20個索引的影響詳細解執行insert exec時的隱藏開銷 分析nosql數據庫的分布式算法詳解mysql與oracle 差異比較之四條件循環語句簡單分析sqlite4的一些設計改變
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载