这就是我所拥有的:
SELECT * FROM scores WHERE userId ="${message.author.id}"
这将获得表格分数中userId
${message.author.id}
{。}}的行。
我想用这个:
SELECT * FROM scores ORDER BY points
现在我不知道该怎么做。我想采用此有序列表,并使用userId
的{{1}}获取行的位置。
所以我基本上想按每个用户的点数来订购表格,然后我想使用${message.author.id}
来查看该用户所处的位置。
实施例
userId
当我使用它时:
userId points
1 20
2 30
3 10
4 25
现在看起来应该是这样的:
SELECT * FROM scores ORDER BY points DESC
然后我想获得特定userId points
2 30
4 25
1 20
3 10
所在行的位置。所以,如果我得到userId
行,我想要离开:3。
我该怎么做?感谢。
答案 0 :(得分:0)
您需要一个排名函数,可以使用相关子查询来完成。
select userid,points,
(select count(distinct points) from scores where points >= s.points) as rnk
from scores s
然后查询所需的userId&#39>。
select rnk
from (select userid,points,
(select count(distinct points) from scores where points >= s.points) as rnk
from scores s
) t
where userid=1 --change this as required
如果您的dbms支持窗口函数,请使用dense_rank
。
select rnk
from (select userid,points,dense_rank() over(order by points desc) as rnk
from scores s
) t
where userid=1
答案 1 :(得分:0)
您可以将以下内容用于SQL Server:
SELECT
ROW_NUMBER() OVER(ORDER BY points) AS RowId, *
FROM
scores
ORDER BY
points
答案 2 :(得分:0)
您可以使用ANSI标准窗口函数(row_number()
或rank()
)进行每个人的排名:
select s.*, rank() over (order by points desc) as ranking
from scores s;
(rank()
允许联系; row_number()
给予不同但相邻排名的并列分数。)
对于特定用户:
select count(*) + 1
from scores s
where s.score > (select s2.score from scores s where s2.userId = @userId);