Как получить определенное значение столбца c из текущей строки в mysql? - PullRequest
0 голосов
/ 20 июня 2020

Как я могу получить значение указанного c столбца в текущей строке? Допустим, у нас есть таблица games со столбцами gameid и game_type. В каждой игре есть несколько победителей (один пользователь может выиграть любое количество раз). Теперь предположим, что у нас есть еще одна таблица game_winners, которая отслеживает всех победителей игр и имеет gameid, userid. Я хочу получить количество уникальных победителей в конкретной игре. Требуемый мне запрос будет выглядеть примерно так:

select gameid, game_type, (
  select count(distinct(userid)) 
  from games 
  join winners 
  where gameid = {gameid of current row}
) as game_winners 
from games 
join winners 

Я не знаю, как получить gameid из текущей строки и передать его в предложение where.

Любая помощь очень признателен.

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Это даст ожидаемый результат:

SELECT
    g.gameid,
    g.game_type,
    count(DISTINCT gw.user_id) as game_winners
FROM
    `game` g
    LEFT JOIN winners gw ON gw.game_id = g.gameid
GROUP BY
    g.gameid;

Если вы хотите получить результат одиночной игры, просто добавьте: (замените '1' своим идентификатором)

WHERE g.gameid = 1;
0 голосов
/ 20 июня 2020

Вы можете использовать агрегирование коррелированных подзапросов:

SELECT g.gameid,
       g.game_type,
       (SELECT count(DISTINCT w.userid)
               FROM winners w
               WHERE w.gameid = g.gameid) AS game_winners
       FROM games g;

Или присоединиться, а затем агрегировать:

SELECT g.gameid,
       g.game_type,
       count(DISTINCT w.userid) AS game_winners
       FROM games g
            LEFT JOIN winners w
                      ON w.gameid = g.gameid
       GROUP BY g.gameid,
                g.game_type;

И, кстати, DISTINCT не является функцией, круглые скобки не требуется.

...