#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 для построения логики условной агрегации.