语法

min | max(column1keep (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的是444ID1=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=1ID3=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,

同理,如果在使用LAST时,最后2个排序中ID3有重复,也会出现假分组的现象。

oracle 分析函数中 keep关键字的使用的更多相关文章

  1. Oracle 数据库中日期时间的插入操作

    Oracle 中如何插入日期时间类型的数据,首先为了演示, 新建数据表如下 create table t( mydate date); 插入日期时间 SQL> insert into t val ...

  2. 如何查询oracle中的关键字

    如何查询oracle中的关键字,执行: select * from v$reserved_words

  3. 【oracle】Oracle中as关键字

    在Oracle中as关键字不能用于指定表的别名 在Oracle中指定表的别名时只需在原有表名和表的别名之间用空格分隔即可 但as关键字可以用于指定列的别名 但在存储过程中如果列的别名与原有列名相同,在 ...

  4. [转]oracle 分析函数over

      oracle 分析函数over 分析函数(OVER) 目录: =============================================== 1.Oracle分析函数简介 2. O ...

  5. Oracle分析函数——函数列表

    --------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...

  6. Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...

  7. Oracle分析函数大全

    分析函数又叫开窗函数,OLAP函数等,因为有人问我用过开窗函数没,呵,什么是开窗函数,从来没听过,难道是分析函数么.哈哈,最后还真是分析函数哦!用过的东西别名也应该知道,赶上这么个事,就剽窃一眼Ora ...

  8. Oracle分析函数Over()

    一.Over()分析函数 说明:聚合函数(如sum().max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录.若想对于某组返回多行记录,则需要使用分析函数. 1.rank( ...

  9. Oracle分析函数巧妙使用

    在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...

随机推荐

  1. Visual Studio 2012 和 SVN 结合实现版本控制 AnkhSvn

    第一步: 安装VisualSVN Server Manager. 下载地址:http://www.onlinedown.net/soft/89603.htm 第二步: 安装TortoiseSVN.注意 ...

  2. 剑指offer 第十天

    37.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数. 采用二分查找法 /* 方法一:时间复杂度O(n),不可选 */ public class Solution { public i ...

  3. Redis入门必读,The Little Redis Book中文版

    csdn的博客都要搬到这里了 The Little Redis Book中文版 入门 The Little Redis Book中文版 第一章 - 基础知识 The Little Redis Book ...

  4. 【CJOJ1494】【洛谷2756】飞行员配对方案问题

    题面 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1 ...

  5. 【JSOI2008】星球大战 (并查集)

    题面 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星 ...

  6. [luogu3412]仓鼠找sugar II

    题面在这里 题意 给定一棵树(\(n\le10^5\)),仓鼠随机选择起点和终点,之后从起点开始随机游走,每次都会等概率地选择和其相邻的任一道路,直到到达终点,求到达终点时步数的期望 sol 因为这一 ...

  7. Luogu3444:[POI2006]ORK-Ploughing

    题意 见luogu Sol 贪心+枚举 如果知道最后一次是消除一行 那么一定消了\(n\)行 此时只要消的列最小就好了 枚举每列从上往下消到哪里,那么下面消的越小越好 那么就有了贪心策略: 先消左右的 ...

  8. Oracle删除控制文件恢复

    控制文件被删除后,系统崩溃,下面介绍下如何恢复控制文件 SQL> conn / as sysdbaConnected to an idle instance.SQL> startup no ...

  9. 本地安装plsql和instantclient连接linux服务器端的oracle

    当虚拟机里面的linux服务器安装好oracle之后(具体安装方法在之前的博客有说到),如何连接使用呢?连接过程中会出现什么问题呢? 1.首先我们下载instantclient的压缩包,直接解压就好, ...

  10. SignalR Self Host+MVC等多端消息推送服务(3)

    一.概述 最近项目确实太忙,而且身体也有点不舒服,慢性咽炎犯了,昨晚睡觉时喘不过气来,一直没休息好,也没什么时间写博客,今天朋友问我什么时候能出web端的消息发送的文章时,我还在忙着改项目的事,趁着中 ...