oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
一、創(chuàng)建一個測試表A
CREATE TABLE A(
ID INT,
NAME VARCHAR2(20)
);
二、向表中添加數(shù)據(jù),且存在相同的數(shù)據(jù)
INSERT INTO A VALUES(1,'YUAN');
INSERT INTO A VALUES(1,'YUAN');
INSERT INTO A VALUES(1,'YUAN');
INSERT INTO A VALUES(2,'YUAN');
INSERT INTO A VALUES(3,'YUAN');
INSERT INTO A VALUES(4,'LI');
INSERT INTO A VALUES(5,'LI');
INSERT INTO A VALUES(6,'YANG');
查詢得到的結(jié)果如下:
三、現(xiàn)在我們要查詢Name不同的所有數(shù)據(jù),每個數(shù)據(jù)只取一條,當(dāng)面對這樣的需求時,可以使用row_number() 函數(shù)加 over()函數(shù)來解決。
(1) 首先我們要懂原理,原理就是按照某個字段進行分區(qū),將該字段相同的數(shù)據(jù)進行標(biāo)號處理,然后每個分區(qū)里面只取第一個標(biāo)號的數(shù)據(jù)即可達到目的,首先我們來對數(shù)據(jù)按照字段NAME進行分區(qū)處理:
SELECT id,name ,row_number() over(partition by name order by id) as groupindex from A;
查詢得到的結(jié)果如下:
通過分區(qū)我們將NAME字段相同的一行數(shù)據(jù)做了標(biāo)記處理,接下來只需要取標(biāo)記為1的那一行數(shù)據(jù)即可達到數(shù)據(jù)去重的目的。
(2)根據(jù)分區(qū),獲取每個分區(qū)中對應(yīng)分組下標(biāo)的數(shù)據(jù)。
select * from (SELECT id,name ,row_number() over(partition by name order by id) as groupindex from A) B where b.groupindex=1 order by b.id; --這里獲取的是分區(qū)中下標(biāo)為1的那一條數(shù)據(jù)
執(zhí)行結(jié)果如下:
標(biāo)簽:INSERT,over,number,id,VALUES,oracle,數(shù)據(jù),INTO,分區(qū)
來源: https://www.cnblogs.com/yuanshuang-club/p/13791839.html
總結(jié)
以上是生活随笔為你收集整理的oracle over函数 去重,oracle over结合row_number分区进行数据去重处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux oracle脚本编写,Lin
- 下一篇: 《简明电路分析》——导读