隐藏查询列

时间:2019-05-28 19:19:59

标签: oracle

我不希望排名列,但仍然希望通过应用密集排名来使用相同格式的数据。

select ename,position,deptno,dense_rank() over(partition by deptno order by ename asc) as rank from emp  where deptno in ('10','30');

enter image description here

1 个答案:

答案 0 :(得分:2)

为什么只需要先按deptno排序,然后再按ename排序即可。

SELECT ename,position,deptno,
FROM emp 
WHERE deptno in ('10','30')
ORDER BY DeptNo, Ename

使用分析功能的两个选项派生表或CTE

派生表/内联视图。

SELECT ename,position,deptno 
FROM (select ename,position,deptno,dense_rank() over(partition by deptno order by ename asc) as rank 
      from emp  
      where deptno in ('10','30')) Z
ORDER BY deptNo, rank

公用表表达式(CTE):

with Z AS (SELECT ename,position,deptno
                , dense_rank() over(partition by deptno order by ename asc) as rank 
          FROM emp  
          WHERE deptno in ('10','30'))
SELECT ename,position,deptno  
FROM z 
ORDER BY deptno, rank

后两种技术都只是避免将rank函数暴露给返回结果的外部查询。它们是“技巧”和次佳的执行时间。除非有特殊原因需要排名数据;我不会用。