Range и Rows в оконных функциях же работают оба с диапазонами строк?

Да, вы правы. В PostgreSQL оконные функции позволяют выполнять операции над диапазоном строк, и для этого используются ключевые слова RANGE и ROWS.

Ключевое слово RANGE определяет окно, основанное на значении столбца-порядка, а не на физическом порядке строк в таблице. Диапазон строк может быть выражен в разных единицах измерения, таких как значения столбца-порядка, временные интервалы или числовые значения. PostgreSQL поддерживает различные типы диапазона, включая временные интервалы (тип interval), числа с плавающей точкой или целые числа.

Ключевое слово ROWS используется для определения окна по количеству строк. Например, если вы указываете ключевое слово ROWS с аргументом 3, окно будет содержать текущую строку и две предшествующие строки.

Распределение строк в окне может происходить по различным критериям, определяемым PARTITION BY. Если вы указываете PARTITION BY, то диапазоны строк будут образовываться независимо для каждой уникальной комбинации значений указанных столбцов.

Например, предположим, что у вас есть таблица с выручкой по месяцам и вы хотите посчитать скользящее среднее значение выручки за последние три месяца для каждого отдельного месяца. В этом случае вы можете использовать оконную функцию с ключевым словом RANGE для определения окна по значениям месяца и ключевым словом ROWS с аргументом 2 для определения включенных в окно строк:

SELECT month, revenue, 
       AVG(revenue) OVER (PARTITION BY month 
                          ORDER BY month 
                          RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) AS rolling_average
FROM sales;

В этом примере окно будет включать текущую строку и две предшествующие строки, основываясь на значении столбца месяца. Функция AVG будет рассчитывать среднее значение выручки для данного окна.

Таким образом, используя ключевые слова RANGE и ROWS в оконных функциях PostgreSQL, вы можете осуществлять различные операции над диапазонами строк, учитывая различные критерии сортировки и разбиения значений столбцов.