gpt4 book ai didi

mysql - SQL 查询将每一行重复 n 次并向其添加来自另一个表的数据

转载 作者:行者123 更新时间:2023-11-29 07:34:16 25 4
gpt4 key购买 nike

我有一个 SQL 查询,其结果表包含 700 个用户 ID 和相应的游戏 ID(用户玩的游戏;总共 1000 个游戏)的列表。

一名用户可能玩过不止一款游戏,并且一个游戏 ID 可能与多个用户 ID 相关联。我在数据库中有另一个表,其中包含所有 gameid 及其各自属性的列表。

我希望我的最终结果表如下:第 1 列包含所有 700 个用户 ID(每个用户 ID 重复的次数与与用户关联的游戏 ID 的数量相同),第 2 列包含相应的游戏 ID 和游戏 ID 表中的其他游戏 ID。针对每个用户 ID 的这些其他游戏 ID 应与针对该用户 ID 已放置的游戏 ID 不同。

表1

Userid      Gameid    
1 3
1 4
2 63
2 76
6 99
6 63

表2

Gameid     gamename
1 GTA
2 DOTA
1000 xyz

结果表

Userid  Gameid       Gamename
1 3 AOE
1 4 Roadrash
1 1 GTA
1 2 DOTA
1 5 qbc
so on up to
1 1000 xyz

表 1 中的所有用户 ID 也是如此。

结果表中每个用户 ID 重复 1000 次,每个用户 ID 的前 n 个 gameid 是表 1 中的游戏 ID(特定用户玩过的游戏),其余的 gameid 来自表 2 中的 1000 个游戏 ID(因此每个用户映射到所有游戏 ID,其中排名靠前的是他们玩过的游戏)。

数据设置的想法是在结果表的末尾包含一列具有二进制值的列(1 -> 用户已经玩过游戏,0 -> 用户还没有玩过游戏)。该表将用于机器学习。

最佳答案

将结果表构建为用户玩过的游戏和用户未玩过的游戏的并集,如下所示:

  select UserId, GameId, GameName, Played
from (
-- games played
select usr.UserId, gme.GameId, gme.GameName, 1 as Played
from USERS usr
inner join GAMES gme on usr.GameId = gme.GameId
union
-- games not played
select usr.UserId, gme.GameId, gme.GameName, 0 as played
from USERS usr, GAMES gme
where gme.GameId not in (
select usr2.GameId
from USERS usr2
where usr2.UserId = usr.UserId
)
)
order by Userid, Played desc, Gameid

外部选择用于对结果集进行排序,以便首先提供所玩的游戏。

关于mysql - SQL 查询将每一行重复 n 次并向其添加来自另一个表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31441563/

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