使用用户详细信息SQL查找排名

使用用户详细信息SQL查找排名,sql,postgresql,Sql,Postgresql,我正在努力学习SQL技能。 我试图得到一个表中用户的排名,我使用下面在stackoverflow中找到的查询,它运行得非常好 Select count(brp.*) + 1 From run_progress brp, (SELECT * FROM run_progress WHERE runner = 1 ) p WHERE brp.progress > p.progress; 它给了我正确的等级,但我还想得到'p'的详细信息,p有等级人员的详细信息。我该怎么做? 希望我的问题清楚。

我正在努力学习SQL技能。 我试图得到一个表中用户的排名,我使用下面在stackoverflow中找到的查询,它运行得非常好

Select count(brp.*) + 1 From run_progress brp, (SELECT * FROM run_progress WHERE runner = 1 ) p WHERE brp.progress > p.progress;
它给了我正确的等级,但我还想得到'p'的详细信息,p有等级人员的详细信息。我该怎么做? 希望我的问题清楚。 需要选择“p”的所有列

多谢各位

更新

CREATE TABLE run_progress
(
   id INT PRIMARY KEY,
   user varchar(255),
   progress numeric
)

INSERT INTO run_progress ( id, user, progress ) VALUES ( 9, 1, 100 )
INSERT INTO run_progress ( id, user, progress ) VALUES ( 11, 2, 90 )
INSERT INTO run_progress ( id, user, progress ) VALUES ( 14, 3, 60 )
INSERT INTO run_progress ( id, user, progress ) VALUES ( 10, 4, 10 )
这是我的桌子

for user:1 it should give me - 1, 9,1,100
for user:4 it should give me - 4, 10,4,100

希望这是清楚的。

为什么不使用窗口功能?它们的性能更好,功能更强大:

select brp.*
from (SELECT brp.*, ROW_NUMBER() OVER (ORDER BY progress DESC) as seqnum
      FROM runprogress brp
     ) brp
我不能100%确定您想要什么,但是如果您想要
runner=1
的排名,请添加
where
子句:

select brp.*
from (SELECT brp.*, ROW_NUMBER() OVER (ORDER BY progress DESC) as seqnum
      FROM runprogress brp
     ) brp
where runner = 1;
注意:您的排名方法为跑步者提供了相同的
进度
不同的排名,这就是为什么使用
行数()。如果希望领带具有相同的分数,请使用
RANK()
densite\u RANK()


是一个数据库文件。

请提供示例数据和所需结果。@GordonLinoff更新了问题