詳解partition by和group by對比
今天大概弄懂了partition by和group by的區(qū)別聯(lián)系。
1. group by是分組函數(shù),partition by是分析函數(shù)(然后像sum()等是聚合函數(shù));
2. 在執(zhí)行順序上,
以下是常用sql關(guān)鍵字的優(yōu)先級
from > where > group by > having > order by
而partition by應(yīng)用在以上關(guān)鍵字之后,實際上就是在執(zhí)行完select之后,在所得結(jié)果集之上進行partition。
3.partition by相比較于group by,能夠在保留全部數(shù)據(jù)的基礎(chǔ)上,只對其中某些字段做分組排序(類似excel中的操作),而group by則只保留參與分組的字段和聚合函數(shù)的結(jié)果(類似excel中的pivot)。
partition by

group by

4.如果在partition結(jié)果上聚合,千萬注意聚合函數(shù)是逐條累計運行結(jié)果的!而在group by后的結(jié)果集上使用聚合函數(shù),會作用在分組下的所有記錄上。
數(shù)據(jù)如下,

SQL1
select a.cc,a.item,sum(a.num) from table_temp a group by a.cc,a.item
Result1

11條記錄經(jīng)group by后為10條,其中cc='cn' and item='8.1.1'對應(yīng)的兩條記錄的num匯總成值3.
SQL2
select a.cc,a.num, min(a.num) over (partition by a.cc order by a.num asc) as amount from table_temp a group by a.cc,a.num; select a.cc,a.num, min(a.num) over (partition by a.cc order by a.num desc) as amount from table_temp a group by a.cc,a.num;
Result2

兩個sql的唯一區(qū)別在于a.num的排序上,但從結(jié)果紅框中的數(shù)據(jù)對比可以看到amount值并不相同,且第二個結(jié)果集amount并不都是最小值1。
在這里就是要注意將聚合函數(shù)用在partition后的結(jié)果集上時,聚合函數(shù)是逐條累積計算值的!
其實partition by常同row_number() over一起使用,
select a.*, row_number() over (partition by a.cc,a.item order by a.num desc) as seq from table_temp a

到此這篇關(guān)于詳解partition by和group by對比的文章就介紹到這了,更多相關(guān)partition by和group by內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server 游標(biāo)語句 聲明/打開/循環(huán)實例
游標(biāo)屬于行級操作 消耗很大 SQL查詢是基于數(shù)據(jù)集的所以一般查詢能有 能用數(shù)據(jù)集 就用數(shù)據(jù)集 別用游標(biāo) 數(shù)據(jù)量大 是性能殺手2013-04-04
SQL?Server2022安裝提示"安裝程序在運行作業(yè)UpdateResult時失敗"解決方法
平時大家在安裝數(shù)據(jù)庫的時候,我也相信大家會遇到過一些報錯導(dǎo)致安裝失敗,下面這篇文章主要給大家介紹了關(guān)于SQL?Server2022安裝提示"安裝程序在運行作業(yè)UpdateResult時失敗"的解決方法,需要的朋友可以參考下2023-05-05
SQL Server數(shù)據(jù)庫中的存儲過程介紹
這篇文章主要介紹了SQL Server數(shù)據(jù)庫中的存儲過程介紹,本文講解了什么是存儲過程、存儲過程語法、存儲過程的一些使用實例等內(nèi)容,需要的朋友可以參考下2015-01-01
一個查看MSSQLServer數(shù)據(jù)庫空間使用情況的存儲過程 SpaceUsed
一個查看MSSQLServer數(shù)據(jù)庫空間使用情況的存儲過程 SpaceUsed...2007-02-02
SQL?Server?2008?R2完美卸載教程(親測有用)
SQL Server 2008 R2是一款非常強大的數(shù)據(jù)庫管理系統(tǒng),但在某些情況下可能需要卸載它,下面這篇文章主要給大家介紹了關(guān)于SQL?Server?2008?R2完美卸載的相關(guān)資料,需要的朋友可以參考下2023-11-11
SQL Server 數(shù)據(jù)頁緩沖區(qū)的內(nèi)存瓶頸分析
數(shù)據(jù)頁緩存是SQL Server的內(nèi)存使用主要的方面,也是占用量最大的部分。在一個穩(wěn)定的DB Server上,這部分內(nèi)存使用會相對較穩(wěn)定2012-08-08

