3 года назад
SQL оконные функции
Пришло время разобраться с оконными функциями и кратко зафиксировать основные моменты. Всем рекомендую курс на степике. Всё последовательно и доступно! общий порядок такой: Ранжирование Сравнение со смещением — это когда мы смотрим, в чем разница между соседними значениями. Оконные функции смещения Чтобы границы фрейма совпадали с границами секции (или всего окна, если секция одна) — используют конструкцию rows between unbounded preceding and unbounded following в определении окна. Агрегация — это когда мы считаем суммарные или средние показатели...
2 месяца назад
rows between Когда я в декабре решала Advent of SQL, на 11 день было интересное задание - найти скользящее среднее по текущей строке с двумя предыдущими. Еще похожая штука применяется, когда нужно найти кумулятивную сумму 🚃 Выход - оконка! (но только в целях SQL) Мы можем написать так: avg(amount) over(order by column) Но под капотом это так: avg(amount) over(order by column rows between unbounded preceding and current row) т.е. мы стартуем с первой строки и берем все до текущей Всего есть несколько способов тюнинга: --от первой до текущей rows between unbounded preceding and current row --от текущей до последней rows between current row and unbounded following --с конкретикой - сколько до и сколько после --от предыдущей до текущей (2 строки) rows between 1 preceding and current row --от текущей до 1 следующей (2 строки) rows between current row and 1 following --от предыдущей до следующей (3 строки, еще текущая есть) rows between 1 preceding and 1 following В контексте задачи со скользящим средним просто нужно взять не 1, а 2 строки: avg(amount) over(order by rows between 2 preceding and current row) А для кумулятивной суммы нужно просто сделать так, потому что по дефолту она и будет кумулятивной✨ sum(amount) over(order by column)