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