Oracle分析函数-keep(dense_rank first/last)
select * from criss_sales where dept_id = 'D02' order by sale_date ;
此时有个新需求,希望查看部门 D02 内,销售记录时间最早,销售量最小的记录。
即希望得到这样的信息
D02 2014/3/6 G01 430
这样,就需要用keep(dense_rank first/last)来帮助处理
select
dept_id
,min(sale_cnt)keep ( dense_rank first order by sale_date) min_early_date
from criss_sales
where dept_id = 'D02'
group by dept_id;
关于使用keep(dense_rank first/last) 会有一些疑问
1.keep(dense_rank first/last) 这句话的含义是什么?
2.为什么要使用min ?
3.为什么使用dense_rank ? rank不可以吗?
关于问题1:
keep 字面意思就是'保持',也就是说保存满足keep()括号内条件的记录
这里我们应该可以想象到,会有多条记录的情况,即存在多个last或first的情况)
dense_rank 是排序策略
first/last 是筛选策略
关于问题2:
使用min的原因是让最后得到的结果唯一,因为有时会存在多个last或first的情况。
例子中:
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT
------- ----------- ---------- -----------
D02 2014/3/6 G00 500
D02 2014/3/6 G01 430
这两条记录,同时满足keep的条件,通过 min(sale_cnt) 我们就得到了唯一的值
D02 2014/3/6 G01 430
下面我们加上MAX 与 MIN对比下:
select
dept_id
,min(sale_cnt)keep ( dense_rank first order by sale_date) min_early_date
,max(sale_cnt)keep ( dense_rank first order by sale_date) max_early_date
from criss_sales
where dept_id = 'D02'
group by dept_id;
很显然 max 取到了两条记录的较大值!
关于问题3:
先看一下换成rank的情况吧
select
dept_id
,min(sale_cnt)keep ( rank first order by sale_date) min_early_date
,max(sale_cnt)keep ( rank first order by sale_date) max_early_date
from criss_sales
where dept_id = 'D02'
group by dept_id;
ORA-02000: 缺失 DENSE_RANK 关键字
换成rank以后直接报错了,至于原因,我的理解是rank不能表示记录排序的相对顺序
例如: 记录 rank dense_rank
100 1 1
100 1 1
95 3 2
第三条记录与第一条和第二条记录的相对位置应该差1,但是用rank无法表示这一点。
感觉rank应该也能实现first/last的筛选,但是oracle似乎并没允许用rank这样去做。
Oracle分析函数-keep(dense_rank first/last)的更多相关文章
- [转]oracle分析函数Rank, Dense_rank, row_number
oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number) 目录 ==================== ...
- Oracle分析函数 — rank, dense_rank, row_number用法
本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course nva ...
- oracle分析函数Rank, Dense_rank, row_number
http://www.cnblogs.com/wuyisky/archive/2010/02/24/oracle_rank.html 目录=============================== ...
- oracle 分析函数 keep(dense_rank first/last)
SQL : select * from crisis_sales where dept_id = 'D02' order by sale_date; DEPT_ID SALE_DATE GOODS ...
- [转]oracle 分析函数over
oracle 分析函数over 分析函数(OVER) 目录: =============================================== 1.Oracle分析函数简介 2. O ...
- oracle分析函数与over()(转)
文章参考:http://blog.csdn.net/haiross/article/details/15336313 -- Oracle分析函数入门-- 分析函数是什么? 分析函数是Oracle专门用 ...
- 常用Oracle分析函数详解 [http://www.cnblogs.com/benio/archive/2011/06/01/2066106.html]
学习步骤:1. 拥有Oracle EBS demo 环境 或者 PROD 环境2. copy以下代码进 PL/SQL3. 配合解释分析结果4. 如果网页有点乱请复制到TXT中查看 /*假设一个经理 ...
- oracle分析函数技术详解(配上开窗函数over())
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Oracle分析函数——函数列表
--------------聚合函数 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算 ...
随机推荐
- JavaScript基础笔记(十二)Ajax
Ajax 一.XMLHttpRequest对象 一)XHR用法 var xhr = new XMLHttpRequest(); //open()方法,参数一:发送方法,参数二:请求的URL,参数三:是 ...
- Self-introduction 自我介绍
Hello everybody,我是一名计算机科学与技术大二的新生,来自小平爷爷的故乡——广安.我之所以说自己是新生,一方面因为我大一下学期才从广播电视学转到计科,另一方面是因为我又进入了新一学年的学 ...
- IAR7.51提示秘钥无效IAR 以及 CCDebug驱动(包含win7 64bit)
今天IAR不识别我的仿真器,然后我感觉驱动有问题,就把之前的驱动卸载了,但是按照以前的方法按章驱动(选择路径到IAR的某个目录),提示找不到驱动... 也不想重新装个IAR了,于是到CSDN上下载了这 ...
- ubuntu16 64 搭建lnmp环境
//安全设置linux(ubuntu16 64) 安全设置1.修改ssh端口 vi /etc/ssh/sshd_config 如果用户想让22和60000端口同时开放,只需在/etc/ssh/sshd ...
- SW加载标准库时出现failed to create Toolboxlibrary object怎么办?
友情提示:Windows+r打开 输入smd 注意操作前要关闭solidworks, 重新打开软件. 下面就可以找到很多标准件了.
- [BZOJ4259]残缺的字符串
Description: 给定两个带通配符的串,求可能出现几次匹配,以及这些匹配位置 Hint: \(n \le 3*10^5\) Solution: 定义匹配函数 \(P(x)=\sum_{i=x} ...
- 等差数列 [USACO Training Section 1.4]
题目描述 一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双平方数集 ...
- Flask 三方组件 WTForms
WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证 from flask import Blueprint from flask import request fro ...
- 3ds max学习笔记(七)-- 实例操作(桌子)
首先[自定义]/[单位设置],将公制和系统的单位都设置成mm(毫米) 若软件右侧无[标准基本体]那么可以选择[创建]/标准基本体/扩展基本体.... 1.创建一个长方体(作为桌面)完成后,点击菜单栏[ ...
- Python内置模块的几点笔记
1.shutil模块 import shutil shutil.make_archive('shutil_archive_test', 'zip', 'D:\pyworkspace\.idea') m ...