我的数据库表(员工)由两列(名称,工资)组成。我尝试根据薪水以降序对表进行排序,并根据名称获取相应的行号。 (根据最高薪水分配等级。)
我尝试了此查询
SELECT
ROW_NUMBER () OVER (
ORDER BY Salary
) RowNum
FROM
Employee
WHERE
Name='Ram';
在我的桌子上,拉姆获得第二高的薪水。所以我希望输出是2。但是我只有错误。请,有人帮助我解决这个问题。
答案 0 :(得分:1)
由于以下条件,您的查询仅返回1行:
WHERE Name='Ram'
所以您总是得到1。
使用RANK()
从子查询中选择行号以处理工资关系,并使用DESC
对工资降序进行排序:
SELECT t.RowNum FROM (
SELECT Name, RANK() OVER (ORDER BY Salary DESC) RowNum
FROM Employee
) t
WHERE t.Name='Ram';
另一个没有窗口功能的更简单,也许更有效的解决方案:
SELECT COUNT(*) + 1 RowNum
FROM Employee
WHERE Salary > (SELECT Salary FROM Employee WHERE Name='Ram');