如何选择玩多人游戏类型的玩家

时间:2019-10-11 20:39:38

标签: sql sql-server

我有一个包含“ PlayerID”和“ GameType”列的SQL表。列“ GameType”可以是“视频游戏”或“虚拟现实”。有些玩家同时玩了这两款游戏,我想看看谁同时玩了视频游戏和虚拟现实。

我尝试使用WHERE和GROUPBY语句来完成此操作,但是我一直在获得整个列表,而不仅仅是同时玩过这两个游戏的玩家。 有谁知道这个问题的最佳解决方案? 谢谢!!

3 个答案:

答案 0 :(得分:1)

一种常见的方法是使用HAVING clause,它与deviceId类似,但在useEffect(fetchId, [deviceId]); 之后适用。

WHERE

答案 1 :(得分:1)

如果GameType的选项不仅仅是“视频游戏”和“虚拟现实”,那么OwlsSleeping的答案可能无效。在这种情况下,您可以使用子查询来识别哪些玩家玩过特定类型:

select PlayerID
from mytable
where PlayerID in (
    select PlayerID
    from mytable
    where GameType = 'Video Games')

    and PlayerID in (
    select PlayerID
    from mytable
    where GameType = 'Virtual Reality'
)

或者,可以使用where子句来扩展OwlsSleeping答案:

SELECT PlayerId FROM table
WHERE GameType in ('Video Games', 'Virtual Reality')
GROUP BY PlayerId 
HAVING COUNT(DISTINCT GameType) > 1

答案 2 :(得分:-2)

您需要做的是通过将具有“ PlayerID”和“ GameType”列的表与玩家表联接来创建虚拟表。然后,您可以查询虚拟表。这是一个示例:

SELECT *
FROM player_game_types
INNER JOIN players
ON player_game_types.PlayerID = players.PlayerID
WHERE player_game_types.GameType = 'Video Games'
INTERSECT
SELECT *
FROM player_game_types
INNER JOIN players
ON player_game_types.PlayerID = players.PlayerID
WHERE player_game_types.GameType = 'Virtual Reality';

不确定您的表名是什么,因此将player_game_types和players更改为您的实际表名。您还可以根据需要更改别名。