☕️ На 7й день мы распределяли посетителей по разным какао-станциям на основе их вкусовых предпочтений. Для этого нужно было вспомнить про пересечения и агрегацию массивов
Получилось такое условие джойна, оно возвращает true, если массивы пересекаются:
left join available_cocoa_cars c
on p.favorite_mixins && c.available_mixins
А так можно красиво собрать все доступные какао-станции по каждому посетителю. Про сортировку даже не вспомнила, что ее можно туда засунуть:
select
passenger_name,
array_agg(c.car_id order by c.car_id)
from ...
group by passenger_name
🌄 На 8й день произошло целое открытие для меня. Все это время существовала концепция named window, а я ни разу ее не видела??😱
Мы определяем окно в самом конце запроса типо как cte и можем переиспользовать название окна в расчетах столбцов:
select
product_id,
price as product_price,
lead(price) over w as previous_price,
row_number() over w as rn
from price_changes
window w as (
partition by product_id order by effective_timestamp desc
)
Причем этот синтаксис работает просто везде: PostgreSQL, MySQL, ClickHouse, Spark SQL, Oracle, Vertica... Что? 😍 Почему это так удобно, но нигде не используется?
📍 Advent of SQL (с впн)
📍 SQL Advent Calendar (с впн)
📍 Мои решения