我有一个包含“ PlayerID”和“ GameType”列的SQL表。列“ GameType”可以是“视频游戏”或“虚拟现实”。有些玩家同时玩了这两款游戏,我想看看谁同时玩了视频游戏和虚拟现实。
我尝试使用WHERE和GROUPBY语句来完成此操作,但是我一直在获得整个列表,而不仅仅是同时玩过这两个游戏的玩家。 有谁知道这个问题的最佳解决方案? 谢谢!!
答案 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更改为您的实际表名。您还可以根据需要更改别名。