Выполнение подзапроса с использованием значений из основного запроса в postgres - PullRequest
0 голосов
/ 13 октября 2011

Я пытаюсь сопоставить данные между двумя таблицами, используя одинаковые значения из основного запроса в подзапросе. Я использую 3 таблицы для этого:

Мир - область мира, в которой был игрок Player - фактический игрок Уничтоженные объекты - просто таблица статистики, используемая для отслеживания прогресса игрока в мире

То, что я пытаюсь сделать, - это создать запрос, который отображает игру и мир, в котором они находились, и подсчитывает все объекты, которые они уничтожили в этом мире. Мой запрос в настоящее время выглядит так:

select
    world_id,
    world_name,
    player_id
    count(select * from objects_destoryed where player_id = <insert player ID>) as Stats
from
    Worlds
    join Players using (player_id)
where
    player_id = <insert player ID>

Я спрашиваю, есть ли лучший способ, а не включать идентификатор игрока дважды, чтобы получить общую статистику. Также есть способ, которым я могу расширить это, чтобы работать на нескольких игроках, которые были в этом мире? Например, использование player_id в заявлении.

Спасибо за любой совет

1 Ответ

1 голос
/ 13 октября 2011

Я не использовал postgresql, но в других разновидностях SQL будет работать что-то вроде этого:

select
    world_id,
    world_name,
    player_id
    count(*) as Stats
from
    Worlds
    join Players using (player_id)
    join objects_destroyed using (player_id)
where
    player_id = <insert player ID>
group by world_id, world_name, player_id

Цель состоит в том, чтобы оператор select возвращал одну строку для каждого объекта, уничтоженного игроком вмир, а затем позвольте выражению group by свернуть строки с одним и тем же миром и игроком в одну строку с количеством строк, объединенных в «Stats».

Для того, чтобы получить эти возвращаемые результаты длянесколько игроков, вы просто изменили бы предложение where так, чтобы оно отделяло мир, а не игрока.У каждого игрока, присутствующего в этом мире, будет свой ряд.

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