SQL partition by語法
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
partition by是Oracle中的一個分析函數(shù)。它的功能有點兒像分組函數(shù)group by,但又有較大區(qū)別。本文通過示例的方式,介紹一下partition by的用法。 數(shù)據(jù)準備建表
插入數(shù)據(jù) insert into xzq_person values ('江蘇','蘇州',10);
insert into xzq_person values ('江蘇','南京',20);
insert into xzq_person values ('浙江','杭州',19);
insert into xzq_person values ('浙江','義烏',13);
insert into xzq_person values ('浙江','金華',11);
insert into xzq_person values ('廣東','廣州',18);
insert into xzq_person values ('廣東','深圳',18);
insert into xzq_person values ('廣東','中山',16);
insert into xzq_person values ('廣東','惠州',16);
insert into xzq_person values ('廣東','東莞',15); partition by 的用法與含義首先我們看一下group by的用法,比如根據(jù)省份分組。
使用了group by后,select語句中只能是分組的字段(比如上面的province)或者是一個聚合函數(shù)(比如count()、sum()、max()等等)。 partition從字面上看是分區(qū)、分塊的意思,所以partition by其實就是根據(jù)某個字段將數(shù)據(jù)分塊,然后可以對該分塊數(shù)據(jù)再做查詢(包括聚合查詢)。 例如,partition by常同row_number() over一起使用:
這個sql的作用就是根據(jù)province分組,并且分組后的每組的數(shù)據(jù)按照persons正序排序。 我們看到通過partition by分組后,select中是可以查出非分組的字段,這和group by是不一樣的。 如果我們要查找每個省份人數(shù)最少的城市,可以用如下sql:
其中,row_number()是對分組后的數(shù)據(jù)進行順序連續(xù)排序。 除了row_number() over,partition by還可以跟rank() over、dense_rank()一起使用。 rank()、dense_rank()和row_number()排序的區(qū)別:
具體看如下的例子,使用partition by和rank() over一起使用。
使用partition by和dense_rank() over一起使用。
另外,也可以做分組+排序后,求累計值的功能等。
用途舉例示例1刪除表中重復(fù)的記錄
轉(zhuǎn)自https://www.cnblogs.com/xfeiyun/p/17765225.html 該文章在 2024/11/2 10:18:47 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |