gpt4 book ai didi

MySQL 选择排名

转载 作者:行者123 更新时间:2023-11-29 22:21:09 27 4
gpt4 key购买 nike

我有一个竞赛,代表可以在许多不同的商店中进行比赛,商店根据进入商店的人数进行积分。

我需要做的是根据积分值选择商店的排名(其中 id = x),如果商店并列,则排名应该相同(即两个商店并列第一)

然后,我需要根据代表商店分数的总和来选择代表的排名。

商店

id  name    points  rep_id
1 Regents Street 1501 3
2 Oxford Street 1500 2
3 Carnaby Street 1499 3
4 Edward Street 1499 1
5 Edward Street 1499 4

代表

id  name
1 John Smith
2 John Doe
3 Joe Smit
3 Lou Jackson

商店排行榜:

1st - 1, Regents Street
2nd - 2, Oxford Street
3rd - 3,4,5

代表排行榜:

1st - 3, Joe Smit (3000)
2nd - 2, John Doe (1500)
3rd - 1,4 (1499)

我有一个查询来获取商店排名,但它不适用于领带。

    SELECT id,
name,
points,
FIND_IN_SET(points,
(SELECT GROUP_CONCAT(points
ORDER BY points DESC)
FROM stores)) AS rank
FROM stores
WHERE id = 1

谢谢

最佳答案

我通常会使用变量进行此类排名:

select s.*,
(@rn := if(@p = points, @rn,
if(@p := points, @rn + 1, @rn + 1)
)
) as rank
from stores s cross join
(select @rn := 0, @p := -1)
order by s.points desc;

另一种方法是相关子查询:

select s.*,
(select count(distinct s2.points)
from stores s2
where s2.points >= s.points
) as rank
from store s;

这两个查询实际上实现的是 dense_rank() 而不是 rank()。从你的问题中并不清楚你真正想要什么。而且,它们也可以针对等级进行修改。

编辑:

如果您需要这个代表而不是商店(这似乎隐藏在问题开头附近):

认为这将在 MySQL 中工作:

select s.rep_id,
(select count(distinct r2.points)
from (select s.rep_id, sum(s.points) as points
from stores s
group by s.rep_id
) r2
where r2.points >= r.points
) as rank
from (select s.rep_id, sum(s.points) as points
from stores s
group by s.rep_id
) r;

关于MySQL 选择排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30698476/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com