Advent of SQL. Days 7-8 ☕️ На 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 (с впн) 📍 Мои решения