我正在努力学习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 )
这是我的table
for user:1 it should give me - 1, 9,1,100
for user:4 it should give me - 4, 10,4,100
希望这是清楚的。
1条答案
按热度按时间jm81lzqq1#
你为什么不使用窗口函数?它们的性能更好,功能更强大:
我不是100%确定你想要什么,但是如果你想要排名的话
runner = 1
,然后添加where
条款:注意:你的排名方法给了跑步者同样的分数
progress
不同的排名,这就是为什么使用ROW_NUMBER()
. 如果你想让领带有相同的分数,可以使用RANK()
或者DENSE_RANK()
.这是一把小提琴。