Oracle keep详解
2014-04-15 23:24
239 查看
原题目
select * from dept where deptno=(select max(deptno) keep(dense_rank last order by count(1))
from emp group by deptno);
解析:
select max(deptno) keep(dense_rank last order by count(1) 拆分成select deptno,max(deptno) keep(dense_rank last order by count(1)
这里的order by count(1) 可以看成select deptno,count(1) group by dept no,也就是说 order by count(1)是按deptno的count的值进行排序的,排序后看KEEP LAST 还是FIRST,如果是last则看后面的,比如说select deptno,max(deptno) keep(dense_rank last order by count(1)查询出来是下面的
deptno count(1)
2 1
5 1
3 2
1 3
4 3
则这里是last,则看最后,则他要最大值,而这里有两个最大值3,则取出来是select max(deptno) keep(dense_rank last order by count(1)取出来是
deptno
1
4
(如果是first
deptno
2
5
)
而取出来的值在按deptno 升序排序且是max结果是
deptno
4
然后在与dept表 结合的。
在这里感谢群友kaka详细的解释
select * from dept where deptno=(select max(deptno) keep(dense_rank last order by count(1))
from emp group by deptno);
解析:
select max(deptno) keep(dense_rank last order by count(1) 拆分成select deptno,max(deptno) keep(dense_rank last order by count(1)
这里的order by count(1) 可以看成select deptno,count(1) group by dept no,也就是说 order by count(1)是按deptno的count的值进行排序的,排序后看KEEP LAST 还是FIRST,如果是last则看后面的,比如说select deptno,max(deptno) keep(dense_rank last order by count(1)查询出来是下面的
deptno count(1)
2 1
5 1
3 2
1 3
4 3
则这里是last,则看最后,则他要最大值,而这里有两个最大值3,则取出来是select max(deptno) keep(dense_rank last order by count(1)取出来是
deptno
1
4
(如果是first
deptno
2
5
)
而取出来的值在按deptno 升序排序且是max结果是
deptno
4
然后在与dept表 结合的。
在这里感谢群友kaka详细的解释
相关文章推荐
- oracle常用sql语句
- oracle 启动错误
- 不用安装oracle客户端也可以用plsql连接远程oracle
- oracle中sql语句的优化[转载]
- 又见Oracle BUG:Rman备份的alert错误提示
- Oracle BUG:ORA-00600[kmgs_parameter_update_timeout_1][17510]
- oracle 降序索引
- oracle中对象表,ref及deref的一个实例。
- 在 Oracle 中根据经纬度计算两地之间的距离
- oracle 身份验证SQLNET.AUTHENTICATION_SERVICES
- oracle 关闭、启动
- Oracle中对XMLType的简单操作(extract、extractvalue
- oracle的xmltype例子
- ORACLE:ORA-12154 TNS无法解析指定的连接标识符(易忽略原因)
- oracle11g如何安装及注意事项
- Oracle数据库案例整理-登录Oracle数据库失败-归档日志大小超出最大值
- Oracle数据库案例整理-登录Oracle数据库失败-非oracle用户权限不足
- Oracle数据库案例整理-登录Oracle数据库失败-审计日志目录满或不存在
- 解决在Oracle数据库中使用hibernate生成表不能正确创建表的有关问题
- Oracle数据库案例整理-登录Oracle数据库失败-表空间可用空间不足