我想知道是否有一种无需使用内置函数即可实现SQL分析功能的方法。
SELECT *,
ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rownum,
DENSE_RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS denserank,
RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rnk
FROM emp;
Run Code Online (Sandbox Code Playgroud)
这是三个等效的表达式:
select emp.*,
(select count(*)
from emp emp2
where emp2.dept_id = emp.dept_id and
(emp2.salary > emp.salary or
emp2.salary = emp.salary and emp2.emp_id <= emp.emp_id
)
) as "row_number",
(select 1 + count(*)
from emp emp2
where emp2.dept_id = emp.dept_id and
emp2.salary > emp.salary
)
) as "rank",
(select count(distinct salary)
from emp emp2
where emp2.dept_id = emp.dept_id and
emp2.salary >= emp.salary
) as "dense_rank",
from emp;
Run Code Online (Sandbox Code Playgroud)
假设存在,emp_id以使行对于“ row_number”而言是唯一的。
| 归档时间: |
|
| 查看次数: |
3117 次 |
| 最近记录: |