Основное отличие режимов ROWS, RANGE и GROUPS в оконных функциях PostgreSQL заключается в том, как они работают с данными: 1
- ROWS действует на отдельных строках. 1 Смещение, которое задаётся в этом режиме, определяет сдвиг, с которым начало рамки позиционируется перед текущей строкой, а конец — после неё. 2
- RANGE работает с группами строк, для которых предложение ORDER BY должно содержать ровно один столбец. 2 Смещение в этом режиме задаёт максимальную разницу между значением столбца в текущей строке и значением того же столбца в предшествующих или последующих строках рамки. 2
- GROUPS также работает с группами строк, но смещение определяет сдвиг (по количеству групп родственных строк), с которым начало рамки позиционируется перед группой строк, родственных текущей, а конец — после этой группы. 2 Группу родственных строк образуют строки, которые считаются равными согласно ORDER BY. 2 Для использования режима GROUPS определение окна должно содержать предложение ORDER BY. 2
Режим GROUPS поддерживается только в версиях PostgreSQL начиная с 11. 1