SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)
来源:互联网 发布:ipv6 端口格式 编辑:程序博客网 时间:2024/05/17 10:09
场景
在业务数据中可能遇到这样的需求。希望获取部门内年龄最小的人中,工资最高的记录。此时就需要使用KEEP(DENSE_RANK FIRST/LAST)来处理数据了。
使用
首先构造一下临时数据。
WITH workers AS( SELECT 'DOM1' dept, 'zhangsan' names , 23 age, 4000 salaries FROM dual UNION ALL SELECT 'DOM1' dept, 'lisi' names , 35 age, 9000 salaries FROM dual UNION ALL SELECT 'DOM2' dept, 'wangwu' names , 26 age, 6500 salaries FROM dual UNION ALL SELECT 'DOM2' dept, 'maliu' names , 28 age, 6000 salaries FROM dual UNION ALL SELECT 'DOM2' dept, 'zhaoqi' names , 26 age, 5000 salaries FROM dual UNION ALL SELECT 'DOM1' dept, 'liba' names , 23 age, 3000 salaries FROM dual )在这六条数据中,我们期望的数据是:(DOM1,4000)和(DOM2,6500)。
我们的sql如下:
SELECT w.dept, MAX(w.salaries) KEEP(DENSE_RANK FIRST ORDER BY w.age) max_salary FROM workers w WHERE 1=1 GROUP BY dept;
此图就是我们的查询结果。
解释
KEEP
keep的意思就是“保持”,会保持满足括号内条件的记录,用ORDER BY 后自然会有FIRST和LAST了。
DENSE_RANK
DENSE_RANK是排序策略。例如,它会将两个第二名排在第一名之后,之后还是第三名排在第二名之后。
FIRST/LAST
FIRST/LAST就是对数据进行筛选了。这里我们筛选age最小的记录。当然不止一条了。然后使用MAX()选取最大salaries了。
延伸
同样的,年龄最大人中的最低工资查询如下:
SELECT w.dept, MIN(w.salaries) KEEP(DENSE_RANK LAST ORDER BY w.age) min_salary FROM workers w WHERE 1=1 GROUP BY dept;
注意
模拟数据的sql一定要跟select语句同时执行。
0 0
- SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)
- SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)
- oracle 分析函数 keep(dense_rank first/last)
- Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST
- 分析函数——函数 RANK,DENSE_RANK,FIRST,LAST
- 函数RANK,DENSE_RANK,FIRST,LAST…
- oracle分析函数 rank函数,dense_rank函数,first函数,last函数,ntile函数求四分位数
- Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST
- Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle 分析函数——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST…
- Oracle分析函数KEEP、DENSE_RANK的使用
- Oracle分析函数KEEP、DENSE_RANK的使用
- Oracle分析函数总结(2) - 排序 - rank,dense_rank,row_number,first,first_value,last,last_value,lag,lead
- IOS开发-删除所有子view
- 采用freemarker静态化页面以及freemarker视图展现简介
- Android_GPS
- 网络:下载进度条
- 有时候由于操作原因,碰到锁表情况,接下来可以根据这两步进行解锁
- SQL 分析函数之KEEP (DENSE_RANK FIRST/LAST)
- 网络:IB 使用技巧
- 常用资源分享
- 项目总结-上位机
- 在CentOS 7中安装与配置JDK8
- Docker, IT技术的又一次变革
- winform两个窗体的切换
- windows下安装使用redis实用教程
- matlab求解常微分方程组/传染病模型并绘制SIR曲线