Оконная функция row_number не работает с результатом regexp_matches
Есть таблица PostgreSql (версия 16) с футбольной статистикой следующей структуры:
team_id smallint -- код команды
rez text -- результаты команды за сезон, собранные в 1 строку.
rez содержит информацию к примеру "XXDXDXXXXXXXXXXDXXXXXXXXXXXXXXDDXXDXXX", где D - ничья, X - победа или поражение.
Стоит задача выбрать все серии (группы, в которых X встречается подряд 10 и более раз). У команды может быть несколько серий, в том числе одинаковой длины.
С помощью запроса
select team_id,
rez,
regexp_matches(rez, '([X]{10,})(.?){1,1}', 'g') as pattern
from group_
order by team_id
мне удалось выделить команды с сериями, при этом количество строк для команды соответствует количеству серий.
Дальше возникла задача пронумеровать серии для команды по порядку возникновения. Пробую использовать оконную функцию row_number()
select team_id,
rez,
regexp_matches(rez, '([X]{10,})(.?){1,1}', 'g') as pattern,
row_number() OVER (PARTITION BY team_id ORDER BY team_id) AS r__n
from group_
order by team_id
Вот результат запроса, но все номера строк равны 1. При этом у команды с кодом 3834 выделены 2 серии.
"team_id","rez","pattern","r__n"
2152,"XXXXXXXXXXXXXXXDDDXXXXXDXDXXXXDDDDXDDX","{XXXXXXXXXXXXXXX,D}","1"
3834,"XXDXDXXXXXXXXXXDXXXXXXXXXXXXXXDDXXDXXX","{XXXXXXXXXX,D}","1"
3834,"XXDXDXXXXXXXXXXDXXXXXXXXXXXXXXDDXXDXXX","{XXXXXXXXXXXXXX,D}","1"
4848,"XXXXDXXXXXXXXXXDDDXXDDXXXDXXXXXXDDXXXX","{XXXXXXXXXX,D}","1"
Подскажите, как можно исправить запрос для корректной нумерации строк.
Дополнение. При использовании временной таблицы все работает как ожидалось.
WITH all_team AS (
select team_id, rez,
regexp_matches(rez, '([X]{10,})(.?){1,1}', 'g') as pattern
from group_
)
select all_team.*,
row_number() OVER (PARTITION BY team_id ORDER BY team_id) AS r__n
from all_team
ORDER BY team_id