Оконная функция 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

Ответы (0 шт):