Oracle中keep的用法 keep的用法归纳

看到很多人对于keep不理解,这里解释一下!


Returnsthe row ranked first usingDENSE_RANK
2种取值:
DENSE_RANK FIRST
DENSE_RANK LAST

在keep (DENSE_RANK first ORDER BY sl)结果集中再取max、min的例子。


SQL>select * fromtest;

ID MC SL
-------------------- ---------------------------------------
1 111 1
1 222 1
1 333 2
1 555 3
1 666 3
2 111 1
2 222 1
2 333 2
2 555 2

9 rows selected

SQL>
SQL>select id,mc,sl,
2 min(mc) keep(DENSE_RANK first ORDERBY sl) over(partition by id),
3 max(mc) keep(DENSE_RANK last ORDERBY sl) over(partition by id)
4 from test
5 ;

ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKLASTORDE
---------------------------------------- -------------------------------------------------------------------------------
1 111 1 111 666
1 222 1 111 666
1 333 2 111 666
1 555 3 111 666
1 666 3 111 666
2 111 1 111 555
2 222 1 111 555
2 333 2 111 555
2 555 2 111 555

9 rows selected

SQL>
Oracle中keep的用法 keep的用法归纳

不要混淆keep内(first、last)外(min、max或者其他):
min是可以对应last的
max是可以对应first的

SQL>select id,mc,sl,
2 min(mc) keep(DENSE_RANK first ORDERBY sl) over(partition by id),
3 max(mc) keep(DENSE_RANK first ORDERBY sl) over(partition by id),
4 min(mc) keep(DENSE_RANK last ORDERBY sl) over(partition by id),
5 max(mc) keep(DENSE_RANK last ORDERBY sl) over(partition by id)
6 from test
7 ;

ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKFIRSTORD MIN(MC)KEEP(DENSE_RANKLASTORDE MAX(MC)KEEP(DENSE_RANKLASTORDE
---------------------------------------- ------------------------------------------------- ------------------------------------------------------------------------------------------
1 111 1 111 222 555 666
1 222 1 111 222 555 666
1 333 2 111 222 555 666
1 555 3 111 222 555 666
1 666 3 111 222 555 666
2 111 1 111 222 333 555
2 222 1 111 222 333 555
2 333 2 111 222 333 555
2 555 2 111 222 333 555

9 rows selected


SQL>select id,mc,sl,
2 min(mc) keep(DENSE_RANK first ORDERBY sl) over(partition by id),
3 max(mc) keep(DENSE_RANK first ORDERBY sl) over(partition by id),
4 min(mc) keep(DENSE_RANK last ORDERBY sl) over(partition by id),
5 max(mc) keep(DENSE_RANK last ORDERBY sl) over(partition by id)
6 from test
7 ;

ID MC SL MIN(MC)KEEP(DENSE_RANKFIRSTORD MAX(MC)KEEP(DENSE_RANKFIRSTORD MIN(MC)KEEP(DENSE_RANKLASTORDE MAX(MC)KEEP(DENSE_RANKLASTORDE
---------------------------------------- ------------------------------------------------- ------------------------------------------------------------------------------------------
1 111 1 111 222 555 666
1 222 1 111 222 555 666
1 333 2 111 222 555 666
1 555 3 111 222 555 666
1 666 3 111 222 555 666

2 111 1 111 222 333 555
2 222 1 111 222 333 555
2 333 2 111 222 333 555
2 555 2 111 222 333 555

min(mc) keep (DENSE_RANK first ORDER BY sl)over(partition by id):id等于1的数量最小的(DENSE_RANK first)为
1 111 1
1 222 1
在这个结果中取min(mc) 就是111
max(mc) keep(DENSE_RANK first ORDERBY sl) over(partition by id)
取max(mc) 就是222;
min(mc) keep(DENSE_RANK last ORDERBY sl) over(partition by id):id等于1的数量最大的(DENSE_RANK first)为
1 555 3
1 666 3
在这个结果中取min(mc) 就是222,取max(mc)就是666

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/190097.html

更多阅读

Oracle中的NVL函数 oracle decode函数

Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数。主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以。下面简单介绍一下几个函数的用法。在介绍

英语中副词的用法 英语中形容词的用法

英语中副词的用法——简介副词(adverb)是一类用以修饰动词(相当于英语的verb)或加强描绘词组或整个句子的词,修饰名词的词一般为形容词,又称限制词。 英语中副词的用法——方法/步骤英语中副词的用法 1、一般副词的位置  在许多情

转载 js中return的用法 c return的用法

原文地址:js中return的用法作者:风依旧_旭一、返回控制与函数结果,语法为:return 表达式;语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果二、返回控制,无函数结果,语法为:return;

破折号用法竞赛转载 英语中破折号的用法

“——”,破折号是小学课文中常见的标点符号,它一般有以下几种用法:1、“这是一年的最后一天——大年夜。”  2、“那是一双很大的拖鞋——那么大,一向是她妈妈穿的。”  3、“每个窗子里都透出灯光来,街上飘着一股烤鹅的香味,因为这

number(p,s)在oracle中p与s的意思 r.s.v.p是什么意思

主要是在Oracle中经常会遇到的问题的一个总结.在oracle中number表示数据型,p=>pricesion,s=>scale.在oracle管方网站上对number(p,s),作以下的解释://===========================================================================

声明:《Oracle中keep的用法 keep的用法归纳》为网友妖怪分享!如侵犯到您的合法权益请联系我们删除