Sql 我需要一个如何开始这个查询的线索
图片显示了我的数据库的一部分是什么样子 我想有一个球员的排名,比如说显示上周左右十名最好的球员,他们的分数和昵称的总和存储在表users中。我知道我需要从比赛历史中总结分数。问题是我不知道如何将用户与他们的观点联系起来,然后总结整个事情Sql 我需要一个如何开始这个查询的线索,sql,oracle,express,variables,join,Sql,Oracle,Express,Variables,Join,图片显示了我的数据库的一部分是什么样子 我想有一个球员的排名,比如说显示上周左右十名最好的球员,他们的分数和昵称的总和存储在表users中。我知道我需要从比赛历史中总结分数。问题是我不知道如何将用户与他们的观点联系起来,然后总结整个事情 有人能给我一个线索吗?集中你的数据,汇总你的分数,建立一个等级,然后根据你的需要调整(日期>=随便什么,等级>=x)。像这样的。未经测试,但它会让你开始 with mypiv as ( select gh.game_id, u.user_id, u.nickna
有人能给我一个线索吗?集中你的数据,汇总你的分数,建立一个等级,然后根据你的需要调整(日期>=随便什么,等级>=x)。像这样的。未经测试,但它会让你开始
with mypiv as (
select gh.game_id, u.user_id, u.nickname,
sum(case when gu.user_id = gh.user_1 then user_1_points
when gu.user_id = gh.user_2 then user_2_points
when gu.user_id = gh.user_3 then user_3_points
when gu.user_id = gh.user_4 then user_4_points
else 0 end) as points
from users u
,games_history gh
where 1=1
and (u.user_id = gh.user_1 or
u.user_id = gh.user_2 or
u.user_id = gh.user_3 or
u.user_id = gh.user_4)
group by gh.game_id,u.user_id, u.nickname)
select game_id, user_id, nickname,
rank() over (partition by game_id order by points) as myrank
from mypiv
您是只使用games_history.user_1还是使用所有的user_n字段?所有的user_n字段。User\u n是users中用户的ID,所以我需要将User\n\u点与User\n匹配,然后对每个用户进行相加。一行中的User\u 2是否也可以是另一行中的User\u 1?games_history.user_n是否可以为任何列的null?是的,用户_1可以在一个游戏中具有id 1,然后在另一个游戏中具有id 2。所以第一个游戏中的用户_1_点数将用于id为1的用户,但第二个游戏中的用户_点数将用于id为2的用户。用户_3和用户_4可以为空,必须有两名玩家才能开始游戏。使用一些查询显示一些代码,这些查询提取一些数据与解决方案相关的表。请参见文本上方的投票箭头(&S)。请在代码问题中给出一个--cut&paste&runnable代码;具有期望和实际输出的示例输入(包括逐字错误消息);清晰的说明和解释。这包括您能给出的最少代码,即您显示为OK的代码,由您显示为not OK的代码扩展。非常感谢,这让我得到了每场比赛的排名。现在,我如何总结所有游戏的得分来获得整体排名?我的意思是,玩家的排名是通过所有游戏的点数总和来排名最佳玩家。如果你不想按每个游戏排名,只需从“partition by”子句中删除“game_id”,并输入一个虚拟值:从mypiv中选择user_id、昵称、rank()over(按“1”按点数顺序划分)作为myrank;