使用SQLite排序后如何获取行的行号?

时间:2019-10-19 11:25:35

标签: sqlite

我的数据库表(员工)由两列(名称,工资)组成。我尝试根据薪水以降序对表进行排序,并根据名称获取相应的行号。 (根据最高薪水分配等级。)

我尝试了此查询

SELECT
    ROW_NUMBER () OVER ( 
    ORDER BY Salary 
   ) RowNum
FROM
    Employee
WHERE
    Name='Ram';

在我的桌子上,拉姆获得第二高的薪水。所以我希望输出是2。但是我只有错误。请,有人帮助我解决这个问题。

1 个答案:

答案 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');