У меня вопрос о вложенных/подзапросах, которые прослушивали меня какое-то время.Вложенные запросы - есть ли более умный способ
Я программирую игру на php. В очень простой версии моей системы я следующие 3 таблицы:
игроков (каждый игрок имеет только один вход):
| player_id | player_name |
статистика (каждый игрок имеет одну запись для каждой игры он находится в) :
| stat_id | player_id | game_id | outcome |
игры (каждые игры имеют один вход):
| game_id | game_name |
Я хотел бы запросить мой базы данных и есть таблица со строками структурированы как следующий, чтобы быть на выходе:
| player_name | count stats for player where outcome = 1 || count stats for player where outcome = 2 |
У меня есть следующий, который работает, но я думаю, что есть более умный и лучший способ сделать это:
select a.player_name,
(select count(*) from stats b where b.player_id = a.player_id AND b.outcome = 1) as number_of_games1,
(select count(*) from stats b where b.player_id = a.player_id AND b.outcome = 2) as number_of_games2
from players a
Я хотел бы также, чтобы иметь возможность использовать «number_of_games1» или «number_of_games2» во внешнем где, но выше подход не позволяет это:
select a.player_name,
(select count(*) from stats b where b.player_id = a.player_id AND b.outcome = 1) as number_of_games1,
(select count(*) from stats b where b.player_id = a.player_id AND b.outcome = 2) as number_of_games2
from players a where number_of_games > 5
что такое умный способ делать то, что я хочу сделать?
Спасибо.
Отлично работает отлично. Но можно ли заказать номер number_of_games1 + number_of_games2? – user3526228
@ user3526228 да, вы можете после использования 'HAVING' использовать' ORDER BY number_of_games1 + number_of_games2' –
Ну, я думал, что попробовал это, но я ошибся, потому что теперь он работает. Еще раз спасибо за помощь! – user3526228