SQL partition by語法
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
partition by是Oracle中的一個分析函數。它的功能有點兒像分組函數group by,但又有較大區(qū)別。本文通過示例的方式,介紹一下partition by的用法。 數據準備建表
插入數據 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的用法,比如根據省份分組。
使用了group by后,select語句中只能是分組的字段(比如上面的province)或者是一個聚合函數(比如count()、sum()、max()等等)。 partition從字面上看是分區(qū)、分塊的意思,所以partition by其實就是根據某個字段將數據分塊,然后可以對該分塊數據再做查詢(包括聚合查詢)。 例如,partition by常同row_number() over一起使用:
這個sql的作用就是根據province分組,并且分組后的每組的數據按照persons正序排序。 我們看到通過partition by分組后,select中是可以查出非分組的字段,這和group by是不一樣的。 如果我們要查找每個省份人數最少的城市,可以用如下sql:
其中,row_number()是對分組后的數據進行順序連續(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刪除表中重復的記錄
轉自https://www.cnblogs.com/xfeiyun/p/17765225.html 該文章在 2024/11/2 10:18:47 編輯過 |
關鍵字查詢
相關文章
正在查詢... |