我不希望排名列,但仍然希望通过应用密集排名来使用相同格式的数据。
select ename,position,deptno,dense_rank() over(partition by deptno order by ename asc) as rank from emp where deptno in ('10','30');
答案 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函数暴露给返回结果的外部查询。它们是“技巧”和次佳的执行时间。除非有特殊原因需要排名数据;我不会用。