У меня есть 2 таблицы, players
и stats
.
Таблица players
имеет id
и name
, а таблица stats
выглядит следующим образом:
id | Player | Stat | Value
1 | 0000001 | Wins | 5
2 | 0000001 | Loses | 6
3 | 0000001 | Jumps | 156
4 | 0000001 | Shots | 580
5 | 0000002 | Wins | 15
6 | 0000002 | Loses | 2
7 | 0000002 | Jumps | 530
8 | 0000002 | Shots | 1704
Я хочу отфильтровать игроков, которые соответствуют нескольким условиям, например, игроков, у которых более 5 побед, но менее 200 прыжков.
Я пробовал это
SELECT players.name
FROM players
LEFT JOIN stats
ON stats.player = players.id
WHERE (stats.stat = "Wins" AND stats.value > 5)
AND (stats.stat = "Jumps" AND stats.value < 200)
GROUP BY players.id
Но ничего не возвращается, потому что GROUP BY
идет после WHERE
. Я также попытался использовать OR
.
SELECT players.name
FROM players
LEFT JOIN stats
ON stats.player = players.id
WHERE (stats.stat = "Wins" AND stats.value > 5)
OR (stats.stat = "Jumps" AND stats.value < 200)
GROUP BY players.id
Но в этом случае он возвращает игроков, которые соответствуют любому из условий, и мне нужны только те, которые соответствуют обоим условиям. В этом конкретном примере c он должен вернуть игрока только с id
0000001
.
Я знаю, что мог бы сделать это с другим LEFT JOIN
для каждой другой характеристики, но правда - это факт таблица огромна и имеет множество различных характеристик, поэтому я не думаю, что это вариант, потому что он будет очень медленным.