使用用户详细信息SQL查找排名
我正在努力学习SQL技能。 我试图得到一个表中用户的排名,我使用下面在stackoverflow中找到的查询,它运行得非常好使用用户详细信息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有等级人员的详细信息。我该怎么做? 希望我的问题清楚。
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更新了问题