詳解partition by和group by對比
今天大概弄懂了partition by和group by的區(qū)別聯(lián)系。
1. group by是分組函數(shù),partition by是分析函數(shù)(然后像sum()等是聚合函數(shù));
2. 在執(zhí)行順序上,
以下是常用sql關鍵字的優(yōu)先級
from > where > group by > having > order by
而partition by應用在以上關鍵字之后,實際上就是在執(zhí)行完select之后,在所得結果集之上進行partition。
3.partition by相比較于group by,能夠在保留全部數(shù)據(jù)的基礎上,只對其中某些字段做分組排序(類似excel中的操作),而group by則只保留參與分組的字段和聚合函數(shù)的結果(類似excel中的pivot)。
partition by
group by
4.如果在partition結果上聚合,千萬注意聚合函數(shù)是逐條累計運行結果的!而在group by后的結果集上使用聚合函數(shù),會作用在分組下的所有記錄上。
數(shù)據(jù)如下,
SQL1
select a.cc,a.item,sum(a.num) from table_temp a group by a.cc,a.item
Result1
11條記錄經group by后為10條,其中cc='cn' and item='8.1.1'對應的兩條記錄的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的排序上,但從結果紅框中的數(shù)據(jù)對比可以看到amount值并不相同,且第二個結果集amount并不都是最小值1。
在這里就是要注意將聚合函數(shù)用在partition后的結果集上時,聚合函數(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
到此這篇關于詳解partition by和group by對比的文章就介紹到這了,更多相關partition by和group by內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SQLSERVER數(shù)據(jù)庫中的5173錯誤解決方法
修復因為客戶那邊需要這個數(shù)據(jù)庫,當我附加數(shù)據(jù)庫的時候報錯,數(shù)據(jù)庫是SQL2005,接下來將介紹詳細解決方法2013-03-03sql server 2016不能全部用到CPU的邏輯核心數(shù)的問題
服務器總共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到這問題,那么今天這節(jié)就先說說這問題是怎么出現(xiàn)的2023-05-05sqlserver數(shù)據(jù)庫危險擴展刪除和恢復代碼
今天為了實現(xiàn)sqlserver的復制功能,因為以前刪除了很多的sqlserver的一些會導致不安全因素的擴展,導致很多功能無法用,沒有辦法需要重新的恢復擴展。2010-07-07清空數(shù)據(jù)庫中所有表記錄 記錄ID恢復從0開始
近來發(fā)現(xiàn)數(shù)據(jù)庫過大,空間不足,因此打算將數(shù)據(jù)庫的數(shù)據(jù)進行全面的清理,但表非常多,一張一張的清空,實在麻煩,因此就想利用SQL語句一次清空所有數(shù)據(jù).找到了三種方法進行清空.使用的數(shù)據(jù)庫為MS SQL SERVER.2010-08-08