Как выбрать игроков, которые играют в несколько типов игр - PullRequest
0 голосов
/ 11 октября 2019

У меня есть таблица SQL, в которой есть столбцы «PlayerID» и «GameType». Столбец «GameType» может быть «Видеоигры» или «Виртуальная реальность». Некоторые из игроков играли в обе эти игры, и я хочу посмотреть, кто играет в обе видеоигры и в виртуальную реальность.

Я пытался дополнить это утверждениями WHERE и GROUPBY, но я продолжаю получать весь список, а не только игроков, которые играли в обоих. Кто-нибудь знает лучшее решение для этой проблемы? Спасибо !!

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Если для 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'
)

В качестве альтернативы, ответ OwlsSleeping может быть расширен с помощью предложения where:

SELECT PlayerId FROM table
WHERE GameType in ('Video Games', 'Virtual Reality')
GROUP BY PlayerId 
HAVING COUNT(DISTINCT GameType) > 1
1 голос
/ 11 октября 2019

Обычный подход - использование предложения HAVING , которое аналогично WHERE, но применяется после GROUP BY.

SELECT PlayerId FROM table
GROUP BY PlayerId 
HAVING COUNT(DISTINCT GameType) > 1
0 голосов
/ 12 октября 2019

Что вам нужно сделать, это создать виртуальную таблицу, соединив вашу таблицу, в которой есть столбцы «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 на ваши настоящие имена. Вы также можете изменить псевдоним, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...