Спасибо Гордону Линоффу за его ответ , это именно то, что мне было нужно!
Я закончил использовать этот запрос просто потому, что лучше его понимаю. Я думаю, это больше noobi sh, но я тоже.
Оба запроса сортируют таблицу из 1M строк в 34 группы примерно за секунду. Этот запрос немного более производителен для 11M строк, сортируя их по 380 группам за 15 секунд, по сравнению с 23 секундами в ответе Гордона.
SELECT results.group_i, MIN(results.price), MAX(results.price), AVG(results.price)
FROM (
SELECT *,
SUM(new_group) OVER (ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS group_i
FROM (
SELECT annotated.*,
CASE
WHEN prev_price IS NULL OR price - prev_price > 1.5 THEN 1
ELSE 0
END AS new_group
FROM (
SELECT *,
LAG(price) OVER (ORDER BY price) AS prev_price
FROM prices
) AS annotated
) AS grouppable
) AS results
GROUP BY results.group_i
ORDER BY results.group_i;