首页 > 解决方案 > 在 PosgreSql 中使用 Rank() 函数选择第二个更高的值

问题描述

我试过这个:

SELECT
code_nuance, nb_voix,
RANK () OVER ( ORDER BY nb_voix DESC) AS rank
FROM  election_2015.resultat_nuance_departement
WHERE rank = 2;

与别名相同:

SELECT
rnd.code_nuance, rnd.nb_voix,
RANK () OVER ( ORDER BY rnd.nb_voix DESC) AS rank
FROM  election_2015.resultat_nuance_departement rnd
WHERE rank = 2;

Rank 在 WHERE close 中不被识别。它说“排名不存在”

任何人?

欢迎任何建议,ty!

标签: sqlpostgresqldatagrid

解决方案


与所有其他列别名一样,您不能在where子句中使用别名。为此,子查询很方便:

SELECT x.*
FROM (SELECT rnd.code_nuance, rnd.nb_voix,
             RANK() OVER (ORDER BY rnd.nb_voix DESC) AS rank
      FROM election_2015.resultat_nuance_departement rnd
     ) x
WHERE rank = 2;

如果值都是唯一的,您还可以使用FETCH

select rnd.*
from election_2015.resultat_nuance_departement rnd
order by rnd.db_voix desc
offset 1 fetch first 1 row only;

推荐阅读