Запрос с добавленными столбцами в качестве раздела

#mysql #sql #partition

#mysql #sql #раздел

Вопрос:

У меня есть набор результатов в results таблице. Каждый результат имеет f_player1 и f_player2 … игрок может находиться в любом столбце с разными результатами.

Я пытаюсь сгруппировать игроков в виде строк, а затем проверить количество каждого игрока в неделю. В результатах вызывается столбец f_week , INT значение которого увеличивается с каждой неделей. Как я могу получить количество для каждого игрока в строках, а затем каждую неделю в виде столбцов?

Мой запрос до сих пор:

 SELECT player,
SUM(CASE WHEN x.f_week=1 THEN 1 ELSE 0 END) AS week_1_count
FROM (
    (SELECT f_player1 AS player, f_week, f_id, f_datetime FROM results)
    UNION
    (SELECT f_player2 AS player, f_week, f_id, f_datetime FROM results)
    ) x INNER JOIN sim_quotes ON sim_quotes.f_id=x.f_id
    GROUP BY player ORDER BY player
  

Итак, я сгруппировался по игрокам, но мне нужно также разделить по f_week, а затем каким-то образом каждую неделю считать столбцом. Количество недель будет увеличиваться со временем, поэтому это не статический запрос.. количество столбцов должно увеличиваться со временем.

Ожидаемый результат:

 player   |     week_1 |      week_2     |    week_3    | ....

player_x |       2              6              3
player_y |       5              1              0  
player_z |       3              10             2
  

Помощь приветствуется.

Комментарии:

1. Примеры данных действительно помогли бы!

Ответ №1:

Если я правильно понимаю, вы можете отключить использование данных union all , а затем агрегировать:

 select player,
       sum(f_week = 1) then week_1,
       sum(f_week = 2) then week_2,
       sum(f_week = 3) then week_3,
       . . . 
from ((select f_player1 as player, f_week
       from results
      ) union all
      (select f_player2 as player, f_week
       from results
      ) 
     ) pw
group by player;
  

Если вам это нужно для неопределенного количества недель, то вам нужно будет использовать динамический SQL для построения логики условной агрегации.