當前位置:首頁 » 編程語言 » sql查詢結果分組
擴展閱讀
緩存視頻損壞的原因 2022-10-03 15:54:55

sql查詢結果分組

發布時間: 2022-08-18 06:39:54

sql中的Group By的查詢過程多列分組的查詢過程是怎樣的

Group By子句
Group By子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細信息的級別。

語法:

[ Group By [ ALL ] Group_By_expression[ ,...n ]

[ WITH { CUBE | ROLLUP } ] ]

參數說明:

ALL:包含所有組和結果集,甚至包含那些任何行都不滿足WHERE子句指定的搜索條件的組和結果集。如果指定了ALL,將對組中不滿足搜索條件的匯總列返回空值。不能用CUBE或ROLLUP運算符指定ALL。如果訪問遠程表的查詢中有WHERE子句,則不支持Group By ALL操作。

Group_By_expression:對其執行分組的表達式。Group_By_expression也稱為分組列。Group_By_expression可以是列或引用列的非聚合表達式。在選擇列表內定義的列的別名不能用於指定分組列。對於不包含CUBE或ROLLUP的Group By子句,Group_By_ expression的項數受查詢所涉及的Group By列的大小、聚合列和聚合值的限制。該限制從8060位元組的限制開始,對保存中間查詢結果所需的中間級工作表有8060位元組的限制。如果指定了CUBE或ROLLUP,則最多隻能有10個分組表達式。

CUBE:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。在結果集內返回每個可能的組和子組組合的Group By匯總行。Group By匯總行在結果中顯示為NULL,但可用來表示所有值。使用GroupING函數確定結果集內的空值是否是Group By匯總值。結果集內的匯總行數取決於Group By子句內包含的列數。Group By子句中的每個操作數(列)綁定在分組NULL下,並且分組適用於所有其他操作數(列)。由於CUBE返回每個可能的組和子組組合,因此,不論指定分組列所使用的是什麼順序,行數都相同。

ROLLUP:指定在結果集內不僅包含由Group By提供的正常行,還包含匯總行。按層次結構順序,從組內的最低級別到最高級別匯總組。組的層次結構取決於指定分組列時所使用的順序。更改分組列的順序會影響在結果集內生成的行數。

使用Group By子句的注意事項。

(1)在SELECT子句的欄位列表中,除了聚集函數外,其他所出現的欄位一定要在Group By子句中有定義才行。例如「Group By A,B」,那麼「SELECT SUM(A),C」就有問題,因為C不在Group By中,但是SUM(A)是可以的。

(2)SELECT子句的欄位列表中不一定要有聚集函數,但至少要用到Group By子句列表中的一個項目。例如「Group By A,B,C」,則「SELECT A」是可以的。

(3)在SQL Server中text、ntext和image數據類型的欄位不能作為Group By子句的分組依據。

(4)Group By子句不能使用欄位別名。
1.按單列進行分組

Group By子句可以基於指定某一列的值將數據集合劃分為多個分組,同一組內所有記錄在分組屬性上具有相同值。

示例:

把「student」表按照「性別」這個單列進行分組。在查詢分析器中輸入的SQL語句如下:

use student

select 性別

from student

Group By 性別

但仍然要強調SELECT子句必須與Group By後的子句或者是分組函數列相一致。

例如,由於下列查詢中「姓名」列既不包含在Group By子句中,也不包含在分組函數中,所以是錯誤的。錯誤的SQL語句如下:

use student select 姓名,性別 from student Group By 性別

例如,在「grade」表中,按「學期」分組查詢。SQL語句如下:

use studnet select 學期 from grade Group By 學期

2.按多列進行分組

Group By子句可以基於指定多列的值將數據集合劃分為多個分組。

示例:

在「student」表中,按照「性別」和「年齡」列進行分組。在查詢分析中輸入的SQL語句如下:

use student

select 性別,年齡

from student

Group By 性別,年齡

在「student」表中,首先按照「性別」分組,然後再按照「年齡」分組。

再舉一個例子,例如,在「grade」表中,按照「學號」和「課程代號」列進行分組。SQL語句如下:

use student

select 學號,課程代號 from grade Group By 學號,課程代號

按多列進行分組時有NULL組的是如何處理的。當表按多列進行分組時有NULL組,這時NULL被作為一個特定值處理,就像其他任何值一樣。也就是說,如果在某個分組列中存在兩個NULL,則按它們有相同的值那樣處理,並將它們放在相同的組中。

示例:

在「grade」表中,按「學期」和「課程代號」列進行分組。在查詢分析器中輸入的SQL語句如下:

use student

select 學期,課程代號

from grade

Group By 學期,課程代號

3.與聚集函數一起使用

Group By子句是經常與聚集函數一起使用。如果SELECT子句中包含聚集函數,則計算每組的匯總值,當用戶指定Group By時,選擇列表中任一非聚集表達式內的所有列都應包含在Group By列表中,或者Group By表達式必須與選擇列表表達式完全匹配。

示例:

在「student」表中,分別求男女生的平均年齡。在查詢分析器中輸入的SQL語句如下:

use student

select 性別,avg(年齡) as 平均年齡

from student

Group By 性別

例如,在「student」表中,分別求有多少個男生和女生。SQL語句如下:

use student

select 性別,count(性別) as 人數 from student Group By 性別

說明:關於聚合函數的詳細講解可參閱9.2.1節。

4.與HAVING子句一起使用

HAVING子句對Group By子句選擇出來的結果進行再次篩選,最後輸出符合HAVING子句中條件的記錄。HAVING子句的語法與WHERE子句的語法相類似,惟一不同的是HAVING子句中可以包含聚合函數。

語法:

[HAVING <search_condition>]

參數說明:

<search_condition>:指定組或聚合應滿足的搜索條件。當HAVING與Group By ALL一起使用時,HAVING 子句替代ALL。

示例:

在「student」表中,按「性別」分組求平均年齡,並且查詢其平均年齡大於21的學生信息。在查詢分析器中輸入的SQL語句如下:

use student

select avg(年齡), 性別

from student

Group By 性別

having avg(年齡)>21

在「grade」表中,按「學期」分組求平均成績,並且查詢「平均成績」大於93的課程信息。在查詢分析器中輸入的SQL語句如下:
+1 已贊過

㈡ sql語句實現分組統計

方法和詳細的操作步驟如下:

1、第一步,創建一個測試表,詳細代碼見下圖,轉到下面的步驟。

㈢ sql查詢怎麼進行(多條件分組判斷匯總)

sql多條件分組查詢舉例:
比如有兩張表:
表一:
姓名 分數
——————
李一 2
李二 1
李三 1
張一 3
張二 2
張三 2
……
表二:

——



要查詢表二中的姓的數據對表一進行分組,然後將分數統計出來。
sql語句寫法如下:
SELECT
b. NAME,
sum(a.score) AS 分數
FROM
tb1 a
LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name`
GROUP BY
b. NAME;
這個是Mysql的寫法 Oracle把SubStr函數改一下就可以了。

㈣ 如何執行 sql 動態分組 查詢

你說的前後一周內沒有明白范圍,是你查詢的日期,還是訂單日期
還是沒太明白前後一周內,我先這樣寫吧,日期范圍你自己套進去就行了

select id,商品名稱,訂單金額,數量,訂單日期
,(select sum(訂單金額) from 訂單表 t2 where t1.商品名稱=t2.商品名稱 and t2.訂單日期>=(t1.訂單日期-7) and t2.訂單日期<=(t1.訂單日期+7)) 合計值
from 訂單表 t1
where to_char(t1.訂單日期, 'YYYY-MM-DD') >= '2019-03-01' and to_char(t1.訂單日期, 'YYYY-MM-DD')<'2019-03-02';

㈤ sql中什麼情況下用分組

你指的應該是「group by」吧?
其實可以這樣理解,舉個例子:
比如,一張「學生成績表」,現在要求你分別求出(注意是「分別」)男生和女生的平均成績(註:指的是「所有男生的平均成績」和「所有女生的平均成績」),此時,你就必須通過「性別」欄位進行分組,然後才可以分別求出男生和女生平均成績!
【個人感覺學習這些語句的時候最好賦予實際的環境中去理解,這樣更清楚也更好理解。希望我的回答對你有所幫助!】

㈥ SQL對查詢結果進行分組

如果你的UID是int型先進行轉換,然後截取前兩位,在用聚合函數獲取總數,進行分組查詢就好了,語句如下(把表名替換下可以直接用):select SUBSTRING(CONVERT(varchar(50),UID),0,3),COUNT(*) from 表 group by SUBSTRING(CONVERT(varchar(50),UID),0,3)

㈦ sql查詢分組怎麼做

select user_id
,sum(case when trade_type='4' then amount else 0 end) as trade_type4
,sum(case when trade_type='5' then amount else 0 end) as trade_type5
,sum(case when trade_type='11' then amount else 0 end) as trade_type11
,sum(case when trade_type='12' then amount else 0 end) as trade_type12
from tab_name
group by user_id

㈧ SQL如何查詢一張表的所有欄位並按其中一個欄位進行分組

1、創建測試表,

create table test_group_cols(id number, value varchar2(20), remark varchar2(20));

㈨ 在SQL中,將查詢結果表的各行按一列或多列取值相等的原則進行分組的子句是

Group By子句。

Group By子句可以將表的行劃分為不同的組。分別總結每個組,這樣就可以控制想要看見的詳細信息的級別。

語法:

[ Group By [ ALL ] Group_By_expression[ ,...n ]

[ WITH { CUBE | ROLLUP } ] ]

(9)sql查詢結果分組擴展閱讀:

使用Group By子句的注意事項。

1、在SELECT子句的欄位列表中,除了聚集函數外,其他所出現的欄位一定要在Group By子句中有定義才行。例如「Group By A,B」,那麼「SELECT SUM(A),C」就有問題,因為C不在Group By中,但是SUM(A)是可以的。

2、SELECT子句的欄位列表中不一定要有聚集函數,但至少要用到Group By子句列表中的一個項目。例如「Group By A,B,C」,則「SELECT A」是可以的。

3、在SQL Server中text、ntext和image數據類型的欄位不能作為Group By子句的分組依據。

4、Group By子句不能使用欄位別名。

㈩ sql中為什麼要使用分組查詢

分組查詢一般用於統計數據,使用分組能讓匯總結果一目瞭然。

1、如emp表中有如下數據: