1. 程式人生 > >sql group by 解析

sql group by 解析

1、概述

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

2、原始表

\

3、簡單Group By

示例1

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

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

\

4、Group By 和 Order By

示例2

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

返回結果如下表

\

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

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

示例3

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

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

\

6、Group By All

示例4

?
123select 類別, 摘要, 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可以寫成

?
123select 類別, 摘要, 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:求各組平均值

?
1select 類別, avg(數量) AS 平均值 from A group by 類別;

示例6:求各組記錄數目

?
1select 類別, count(*) AS 記錄數 from A group by 類別;

示例7:求各組記錄數目

8、Having與Where的區別

where 子句的作用是在對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾資料,where條件中不能包含聚組函式,使用where條件過濾出特定的行。
having 子句的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚組函式,使用having 條件過濾出特定的組,也可以使用多個分組標準進行分組。

示例8

?
123select 類別, sum(數量) as 數量之和 from Agroup by 類別having sum(數量) > 18

示例9:Having和Where的聯合使用方法

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

9、Compute 和 Compute By

?
1select * from A where 數量 > 8

執行結果:

\

示例10:Compute

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

執行結果如下:

\

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

示例11:Compute By

?
12345select *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 解析

1、概述“Group By”從字面意義上理解就是根據“By”指定的規則對資料進行分組,所謂的分組就是將一個“資料集”劃分成若干個“小區域”,然後針對若干個“小區域”進行資料處理。2、原始表3、簡單Group By示例1?123select 類別, sum(數量) as 數量之

[原始碼解析] GroupReduce,GroupCombine 和 Flink SQL group by

# [原始碼解析] GroupReduce,GroupCombine和Flink SQL group by [TOC] ## 0x00 摘要 本文從原始碼和例項入手,為大家解析 Flink 中 GroupReduce 和 GroupCombine 的用途。也涉及到了 Flink SQL group by

SQL GROUP BY 語句

rom idt 網站 num web sla post mysql where SQL GROUP BY 語句 GROUP BY 語句可結合一些聚合函數來使用 GROUP BY 語句 GROUP BY 語句用於結合聚合函數,根據一個或多個列對結果集進行分組。

SQL group by分組查詢

create server insert 一定的 ID all 註意 至少 滿足 本文導讀:在實際SQL應用中,經常需要進行分組聚合,即將查詢對象按一定條件分組,然後對每一個組進行聚合分析。創建分組是通過GROUP BY子句實現的。與WHERE子句不同,GROUP BY

SQL Group By與Order By

SQL Group By與Order By Group By的字面含義可以理解為分組,使用後可以根據 By 後面的欄位對數字進行彙總。 原表資料:     CLEAR GT_DATA[] .   SELECT

sql GROUP BY子句使用例項

GROUP BY子句 GROUP BY子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細資訊的級別。語法: [ GROUP BY [ ALL ] group_by_expression[ ,...n ] [ WITH { CUBE | ROLLU

elasticsearch xpack sql group by 如何對時間按年月日進行分組查詢

ES從6.3開始已經支援SQL了,當然還有很多不完善的地方,比如對於巢狀查詢,連表查詢,但是對於單表而言,提供的SQL已經基本夠用了。 這裡只講一下我在實際業務中遇到的一個問題,運營那邊想要對時間進行分組查詢,可以按年或是月或是日進行分組,為了能滿足運營那邊的要求,自己研究

SQL Group By分組的使用

分組計算函式:相對於單行函式,也可稱之為多行函式,它的輸入是多個行構成得一個行集(這個行集可以是一 張表的所有行,也可以是按照某個維度進行分組後的某一組行),而輸出都是一個值; 比如我們常見的一些分組計算需求:求某個部門的薪資總和,薪資平均值,薪資最大值等等。

Oracle SQL group by-報錯:不是單組分組函式

報錯:不是單組分組函式 例項:select deptno,count(empno) from emp; 報錯:不是單組分組函式 原因: 1, 如果程式中使用了分組函式,則有兩種情況可以使用: 程式中存在group by,並指定了分組條件,這樣可以將分

SQL SUM() 函式、SQL GROUP BY 語句、SQL HAVING 子句

SQL GROUP BY 例項 我們擁有下面這個 "Orders" 表: O_Id OrderDate OrderPrice Customer 1 2008/12/29 1000 Bush 2 2008/11/23 1600 Carter 3 2008/10/05 700 Bush 4 2008/09/28

Oracle-SQL-group by-報錯:不是單組分組函式

報錯:不是單組分組函式 例項:select deptno,count(empno) from emp; 報錯:不是單組分組函式 原因: 1,如果程式中使用了分組函式,則有兩種情況可以使用: 程式中存在group by,並指定了分組條件,這樣可以將分組條件一起查詢出來 改為:

SQL group by後獲取其他欄位(多種方法)

最近幫朋友處理一批資料,將指定的列重複的資料拿出來。這些資料在excel裡。有10W條左右。由於EXCEL不好操作。就想著將資料匯入資料庫通過SQL語句來操作。 匯入資料庫成功了,但由於SQL不是很牛,所以查詢有些問題。 我用group by 把重複的拿掉,但還有個問題,大

資料庫排名sql,group by 分組查詢按照時間最大值

先給出類似的簡單表 DROP TABLE IF EXISTS `TouTiaoAnchor`; CREATE TABLE `TouTiaoAnchor` ( `HourId` int(10) unsigned NOT NULL, `BetinTime` varcha

sql中的group by 和 having 用法解析(張高偉)

--sql中的group by 用法解析: -- Group By語句從英文的字面意義上理解就是“根據(by)一定的規則進行分組(Group)”。 --它的作用是通過一定的規則將一個數據集劃分成若干個小的區域,然後針對若干個小區域進行資料處理。 --注意:group by 是先排序後分組; --舉例子說明:

SQL 筆記1,left join,group by,having

rom from 報錯 order by use join unknown and select 表:XS,XK,CJ left join 表1 on 表1.字段=表2.字段 group by 分組條件 order by 排序條件 asc正序(小到大),desc倒序 hav

SQL基本操作——GROUP BY

order 實例 擁有 分組 tom price 金額 根據 操作 GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。 SQL GROUP BY 實例:我們擁有下面這個 "Orders" 表 O_Id OrderDate OrderPrice

sql關於group by之後把每一條記錄的詳情的某個字段值合並提取的方法

簡單 asset 麻煩 數值 select count bsp 直接 表達式 在利用group by寫了統計語句之後,還有一個查看每一個記錄詳情的需求, 首先想到的是根據group by的條件去拼接查詢條件, 但是條件有點多,拼接起來不僅麻煩,還容易出錯, 所以想到要在

SQL重復記錄查詢-count與group by having結合查詢重復記錄

nbsp 根據 iteye sele rul 判斷 select pro .net 查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷select * from peoplewhere peopleId in (select peopleId fr

SQLgroup by 和 having

包含 where lan tool 必知必會 平均工資 bin view IT 轉自:mysql必知必會——GROUP BY和HAVING GROUP BY語法可以根據給定數據列的每個成員對查詢結果進行分組統計,最終得到一個分組匯總表。 sele

SQLgroup by

group access 概述 head 分類 count last esc htm Group By 分類匯總 1、概述 “Group By”從字面意義上理解就是根據“By”指定的規則對數據進行分組,所謂的分組就是將一個“數據集”劃分成若幹個“小區域”,然後針對若幹個“小