使用特定的 where 和 order by 子句查找行和总行的位置

Find the position of row and total rows with certain where and order by clauses

我有一个带有 whereorder by 子句的 sql 查询:

SELECT "id" FROM "persons" 
WHERE "id" in (10,20,30,40,50,60,70,80,90,100) 
ORDER BY "id" DESC

现在我需要在上面的查询中获取 id=20 的行的位置和找到的行的总数。所以我

SELECT "id",pos FROM(
   SELECT "id", rownum() as pos FROM(
       SELECT "id" FROM "persons" 
       WHERE "id" in (10,20,30,40,50,60,70,80,90,100)
       ORDER BY "id" DESC
   )
)
WHERE "id"=20;

然而,我最后的查询只给出了行的位置。我现在如何获取行总数?条件:没有 window functions 因为我使用不支持它们的 RDBMS - h2 和 hsqldb.

看看这是否有帮助。

 SELECT id,
  (SELECT Count(*) from persons per1 where per1.id< per2.id) AS Rownumber  
 FROM persons per2
 WHERE id in (10,20,30,40,50,60,70,80,90,100) 
 ORDER BY id DESC

用 HSQLDB 试试这个

WITH p("id", "pos") AS ( SELECT "id", rownum() AS "pos" FROM "persons" 
   WHERE "id" IN (10,20,30,40,50,60,70,80,90,100)
   ORDER BY "id" DESC) 
SELECT "id", "pos", (select count(*) from P) AS "count" FROM P
WHERE "id"=20;