表数据:
image.png
实现结果(对薪水进行排名):
image.png
sql语句实现
1.子查询只能返回一条数据,如果子查询返回多条数据则会出错。
2.每一条select子查询只能查询一个字段。
SELECT
s1.emp_no,
s1.salary,
(SELECT
COUNT(DISTINCT s2.salary)
FROM
salaries s2
WHERE s2.to_date = '9999-01-01'
AND s2.salary >= s1.salary) AS `rank` -- 去重:计算并列排名
FROM
salaries s1
WHERE s1.to_date = '9999-01-01'
ORDER BY s1.salary DESC,
s1.emp_no ;
窗口函数实现
SELECT
emp_no,
salary,
dense_rank () over (
ORDER BY salary DESC) AS `rank`
FROM
salaries
WHERE to_date = '9999-01-01' ;