gpt4 book ai didi

Mysql select查询计数直到达到with条件的条件

转载 作者:行者123 更新时间:2023-11-29 11:24:23 24 4
gpt4 key购买 nike

我有用户列表及其积分和游戏 ID。我需要根据游戏顺序通过 max(lb_point) 找到指定用户的排名。

我已经完成了根据单个游戏获取排名的查询,如下所示。

select count(*) AS user_rank 
from (
select distinct user_id
from leader_board
where lb_point >= (select max( lb_point )
from leader_board
where user_id = 1
and game_id = 2 )
and game_id = 2
) t

但我需要根据整体游戏找到排名。示例我有 3 个不同的游戏 (1,2,3)。通过传递 user_id,我需要找到他在所有三款游戏中的总体排名。你能帮我解决这个问题吗?

lb_id    user_id   game_id   lb_point
------------------------------------------------
1 1 2 670
2 1 1 200
3 1 2 650
4 1 1 400
5 3 2 700
6 4 2 450
7 2 1 550
8 2 1 100
9 1 1 200
10 2 1 100
11 1 1 200
12 2 1 100
13 1 1 200
14 2 1 100
15 1 1 200
16 2 1 100
17 1 1 200
18 2 1 100
19 1 1 200
20 2 1 100
21 1 1 200
22 2 1 800

最佳答案

use sandbox;
/*create table t (lb_id int, user_id int, game_id int, lb_point int);
truncate table t;
insert into t values
(1 , 1, 2, 670),
(2 , 1, 1, 200),
(3 , 1, 2, 650),
(4 , 1, 1, 400),
(5 , 3, 2, 700),
(6 , 4, 2, 450),
(7 , 2, 1, 550),
(8 , 2, 1, 100),
(9 , 1, 1, 200),
(10, 2, 1, 100),
(11, 1, 1, 200),
(12, 2, 1, 100),
(13, 1, 1, 200),
(14, 2, 1, 100),
(15, 1, 1, 200),
(16, 2, 1, 100),
(17, 1, 1, 200),
(18, 2, 1, 100),
(19, 1, 1, 200),
(20, 2, 1, 100),
(21, 1, 1, 200),
(22, 2, 1, 800);

*/

select t.*
from
(
select s.*,@rn:=@rn+1 as rank
from
(
select user_id, sum(lb_point) points
from t
where lb_id = (select t1.lb_id from t t1 where t1.user_id = t.user_id and t1.game_id = t.game_id order by t1.lb_point desc limit 1)
group by user_id
order by points desc
) s
,(select @rn:=0) rn
) t
where t.user_id = 1

最里面的查询获取每个用户每场比赛的最高分并将其求和。下一个查询根据每个用户的聚合分数分配排名。最外面的查询选择用户。

关于Mysql select查询计数直到达到with条件的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38476916/

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