oracle 分析函数中 keep关键字的使用
语法
min | max(column1) keep (dense_rank first | last order by column2) over (partion by column3);
另外first last还可以结合avg sum等使用。
解释:
返回按照column3分组后,按照column2排序的结果集中第一个或最后一个最小值或最大值column1。
实例:
create table tx2(id1 int ,id2 int,id3 int);
insert into tx2(id1,id2,id3)
values(1,111,1);
insert into tx2(id1,id2,id3)
values(1,222,1);
insert into tx2(id1,id2,id3)
values(1,333,2);
insert into tx2(id1,id2,id3)
values(1,444,3);
insert into tx2(id1,id2,id3)
values(2,555,1);
insert into tx2(id1,id2,id3)
values(2,666,2);
insert into tx2(id1,id2,id3)
values(2,777,3);
select * from tx2;
ID1 ID2 ID3
1 111 1
1 222 1
1 333 2
1 444 3
2 555 1
2 666 2
2 777 3
SQL1,
按照ID1分组,ID3排序后,第一个最小的ID2,预期ID1=1的是111 ID1=2的是555。执行结果:
SELECT t.id1, t.id2, t.id3, MIN(t.id2) keep(dense_rank FIRST ORDER BY t.id3) over(PARTITION BY t.id1) ASminval FROM tx2 t;
ID1 ID2 ID3 MINVAL
1 111 1 111
1 222 1 111
1 333 2 111
1 444 3 111
2 555 1 555
2 666 2 555
2 777 3 555
SQL2,
按照ID1分组,ID3排序后,最后一个最小值ID2,预期ID1=1的是444,ID1=2的是777,。执行结果:
SELECT t.id1, t.id2, t.id3, MIN(t.id2) keep(dense_rank last ORDER BY t.id3) over(PARTITION BY t.id1) AS minvalFROM tx2 t;
ID1 ID2 ID3 MINVAL
1 111 1 444
1 222 1 444
1 333 2 444
1 444 3 444
2 555 1 777
2 666 2 777
2 777 3 777
SQL3,
如果ID3有重复,比如ID1=1,ID3=1的两个数据。此时
SELECT t.id1, t.id2, t.id3, MAX(t.id2) keep(dense_rank FIRST ORDER BY t.id3) over(PARTITION BY t.id1) asmaxval FROM tx2 t;
预期结果ID1=1的值应为444,可是
ID1 ID2 ID3 MAXVAL
1 111 1 222----------------结果好像是从ID3=1的分组中取出来的
1 222 1 222
1 333 2 222
1 444 3 222
1 888 3 222
2 555 1 555
2 666 2 555
2 777 3 555
SQL4,
oracle 分析函数中 keep关键字的使用的更多相关文章
- Oracle 数据库中日期时间的插入操作
Oracle 中如何插入日期时间类型的数据,首先为了演示, 新建数据表如下 create table t( mydate date); 插入日期时间 SQL> insert into t val ...
- 如何查询oracle中的关键字
如何查询oracle中的关键字,执行: select * from v$reserved_words
- 【oracle】Oracle中as关键字
在Oracle中as关键字不能用于指定表的别名 在Oracle中指定表的别名时只需在原有表名和表的别名之间用空格分隔即可 但as关键字可以用于指定列的别名 但在存储过程中如果列的别名与原有列名相同,在 ...
- [转]oracle 分析函数over
oracle 分析函数over 分析函数(OVER) 目录: =============================================== 1.Oracle分析函数简介 2. O ...
- Oracle分析函数——函数列表
--------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...
- Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...
- Oracle分析函数大全
分析函数又叫开窗函数,OLAP函数等,因为有人问我用过开窗函数没,呵,什么是开窗函数,从来没听过,难道是分析函数么.哈哈,最后还真是分析函数哦!用过的东西别名也应该知道,赶上这么个事,就剽窃一眼Ora ...
- Oracle分析函数Over()
一.Over()分析函数 说明:聚合函数(如sum().max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录.若想对于某组返回多行记录,则需要使用分析函数. 1.rank( ...
- Oracle分析函数巧妙使用
在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...
随机推荐
- 修改windows7中文件的权限
1.修改ntkrnlpa.exe的权限 2.鼠标右键,选择"属性" 3.单击"安全"选项,选择"高级" 4.在高级安全设置中,选择" ...
- Linux查看用于终止进程命令
Linux查看用于终止进程命令 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ...
- eclipse - The superclass "javax.servlet.http.HttpServlet" was not found on the Java
- 【BZOJ3172】单词(AC自动机)
[BZOJ3172]单词(AC自动机) 题面 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input ...
- 【HDU1711】Number Sequence
题面 大致题意: 给定两个数列A,B,长度分别为N和M 求出 满足 Ak=B1 ,Ak+1=B2......Ak+M-1=Bm 的最小k值 如果有多个k值输出最小的一个 题解 KMP裸题 直接计算B数 ...
- [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- 浅谈API安全设计
一.简述 安全是恒久的话题,如果不注意防范,会带来很严重的后果.比如: 1.接口被大规模调用消耗系统资源,影响系统的正常访问,甚至系统瘫痪 2.数据泄露 3.伪造(篡改)数据,制造垃圾数据 4.App ...
- 【BSGS】BZOJ3239 Discrete Logging
3239: Discrete Logging Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 729 Solved: 485[Submit][Statu ...
- cookie 使用方法
//写cookies setCookie: function(name, value) { let days = 1 let exp = new Date() exp.setTime(exp.getT ...
- js 数组 remove
在写js代码时候,有时需要移除数组的元素,在js数组中没有remove 方法, 不过有splice 方法同样可以用于移除数组元素:(http://www.w3school.com.cn/jsref/j ...