语法与说明
select AAA, 序号函数 over(partition by BBB group by CCC) from table;
- select后面跟什么字段随便。
- 序号函数有多种,类似row_number()等。
- partition by后面跟的字段实际是分组字段,与group by 后面跟的字段类似。
- 再之后的order字段,就是分组后排序。
序号函数说明
测试数据
CREATE TABLE over_func_tmp(
name varchar(10),
age number(1)
);
INSERT INTO over_func_tmp(name,age)
SELECT 'a', 1 FROM dual UNION ALL
SELECT 'a', 1 FROM dual UNION ALL
SELECT 'a', 2 FROM dual UNION ALL
SELECT 'a', 4 FROM dual
;
row_number()
直接按照结果从1开始升序。
SELECT t.name, t.age , ROW_NUMBER() over(PARTITION BY name ORDER BY age) AS no FROM over_func_tmp t;
--a 1 1
--a 1 2
--a 2 3
--a 4 4
rank()
如果结果中,某数据相同,则序号相同,下一行数据序号+2。
SELECT t.name, t.age , rank() over(PARTITION BY name ORDER BY age) AS no FROM over_func_tmp t;
--a 1 1
--a 1 1
--a 2 3
--a 4 4
dense_rank()
如果结果中,某数据相同,则序号相同,下一行数据序号+1。
SELECT t.name, t.age , dense_rank() over(PARTITION BY name ORDER BY age) AS no FROM over_func_tmp t;
--a 1 1
--a 1 1
--a 2 2
--a 4 3
标签:name,--,over,partition,序号,Oracle,age,SELECT
From: https://www.cnblogs.com/hr0552/p/17695155.html