create table test2 as
select 1 id, 111 mc,1 sl from dual union all
select 1 , 222,6 from dual union all
select 1 , 333,2 from dual union all
select 1 , 555,3 from dual union all
select 1 , 666,3 from dual union all
select 2 , 111,1 from dual union all
select 2 , 222,1 from dual union all
select 2 , 333,2 from dual union all
select 2 , 555,2 from dual
select t.* ,
row_number() over (partition by id order by t.sl) row_num,
rank() over (partition by id order by t.sl) rank,
dense_rank() over (partition by id order by t.sl) denserank
from test2 t
ID MC SL ROW_NUM RANK DENSERANK
---------- ---------- ---------- ---------- ---------- ----------
1 111 1 1 1 1
1 333 2 2 2 2
1 666 3 3 3 3
1 555 3 4 3 3
1 222 6 5 5 4
2 111 1 1 1 1
2 222 1 2 1 1
2 555 2 3 3 2
2 333 2 4 3 2
可知:
dense_rank在做排序时如果遇到列有重复值,则重复值所在行的序列值相同,而其后的序列值依旧递增,rank则是重复值所在行的序列值相同,但其后的序列值从+重复行数开始递增,而row_number则不管是否有重复行,(分组内)序列值始终递增
keep(dense_rank first/last order by )
select id,mc,sl,
2 min(mc) keep(dense_rank first order by sl) over(partition by id) min_mc,
3 min(mc) keep(dense_rank last order by sl) over(partition by id) min_mc
4 from test2;
ID MC SL MIN_MC MIN_MC
---------- ---------- ---------- ---------- ----------
1 111 1 111 222
1 222 6 111 222
1 333 2 111 222
1 555 3 111 222
1 666 3 111 222
2 111 1 111 333
2 222 1 111 333
2 333 2 111 333
2 555 2 111 333
9 rows selected
转自:
http://blog.163.com/dykj_dxj/blog/static/2549252520108271158241/
发表评论
-
ORACLE 两个表或两个结果集的数据对比常用的函数
2017-04-19 15:13 1073假设有两个表A,B,都只有一个字段PHONE 1、MIN ... -
Oracle删除重复数据,并只保留一条记录
2016-07-16 13:09 29991、查找表中多余的重复记录,重复记录是根据单个字段(Id)来 ... -
客户端连接虚拟机Oracle服务器错误
2016-01-14 00:51 14521.在虚拟机上安装Oracle ... -
ETL -- ORACLE -- CDC技术
2015-09-22 14:08 1925ETL: Extract(抽取) ... -
影子数据库
2015-09-18 12:31 5010什么是数据库中的影子文件? A shadow file ... -
ETL的一些概念
2015-09-17 16:57 1829一、Analysis - 分析:1. ... -
JAVA createSQLQuery().list()返回日期格式没有时分秒的解决方法
2015-01-21 14:50 1969在开发web项目中,发现提取Oracle中某 ... -
Oarcle中oracleHomeKey处理方法
2014-11-24 18:57 0Oarcle中oracleHomeKey处理方法 出现O ... -
oracle创建表空间
2014-10-24 14:15 629/*分为四步 *//*第1步:创建临时表空间 */cre ... -
Oracle中针对中文进行排序
2013-09-13 09:15 908在oracle 9i之前,对中文的排序,是默认按2 ... -
Oracle over函数
2013-04-11 09:19 757sql over的作用及用法:rank ( ) over ( ... -
oracle 层次查询判断叶子和根节点
2012-12-24 16:23 4348oracle 9i判断是叶子或根节点,是比较麻烦的一件事情,S ... -
oracle wm_concat(column)函数的使用
2012-07-06 14:05 849oracle wm_concat(column)函数使我们经常 ... -
Oracle 循环插入测试数据
2012-03-28 16:10 1715declare maxrecords consta ... -
Oracle Rownum用法详解
2012-03-27 10:30 828对于rownum来说它是oracle系统顺序分配为从查询返回的 ... -
查看oracle当前连接数
2012-03-07 09:12 876怎样查看oracle当前的连接数呢?只需要用下面的SQL语句查 ... -
oracle中的exists 和not exists 用法详解
2012-03-06 17:31 915有两个简单例子,以说明 “exists”和“in”的效率问 ... -
Oracle创建表空间、用户、导入导出命令
2012-03-05 10:46 0//创建临时表空间 create temporary tabl ... -
Oracle删除表中重复数据
2011-11-02 17:13 1183我们可能会出现这种情 ... -
ORACLE递归查询
2011-03-04 14:03 1388一、建表 CREATE TABLE TB_GROUP( ...
相关推荐
`RANK()`, `DENSE_RANK()`, `ROW_NUMBER()`以及`NTILE()`这些函数用于为每一行分配一个唯一的排名。`RANK()`会跳过相同的排名,`DENSE_RANK()`则不会,`ROW_NUMBER()`为每行分配连续的数字。`NTILE()`则将结果集分成...
在Oracle中,我们可以使用`RANK()`, `DENSE_RANK()`, 或 `ROW_NUMBER()` 函数配合`ORDER BY`子句来实现。例如,如果我们想找到每个区域销售额最高的前5个客户,可以这样写: ```sql SELECT region_id, customer_...
- **MIN(mc) KEEP (DENSE_RANK FIRST ORDER BY sl) OVER (PARTITION BY id)**: 按`id`分组后,根据`sl`排序,取每个分组的最小值。 - **ROW_NUMBER()**: 不同于其他排名函数,即使值相同也不会有相同的排名。 - **...
<3>.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows <4>.creating reverse key indexes sql> create unique index xay_id on xay(a) reverse pctfree 30 ...
MAX(Course) KEEP (DENSE_RANK FIRST ORDER BY Rank) AS "HighestScoredCourse", MAX(Course) KEEP (DENSE_RANK LAST ORDER BY Rank) AS "LowestScoredCourse" FROM RankedScores GROUP BY Student; ``` 4. **...