❤️ Переменные в SQL: один раз написал — везде обновилось
Вам знакома ситуация, когда - написал большой sql запрос для задачи, а потом заказчик говорит: «Покажи то же самое, но за прошлый квартал» ?
И вы начинаете искать дату по всему файлу. Находите все вхождения, правите — и где-то всё равно пропускаешь одно. Запрос считает не то.
В общем очень много рутины.
🟢 В Python мы бы написали переменную в начале и пере использовали ее везде:
start_date = "2024-01-01"
discount_threshold = 0.10
🟢 Но в SQL тоже можно кое что придумать:
WITH params AS (
SELECT
DATE '2024-01-01' AS period_start,
DATE '2024-03-31' AS period_end,
0.10 AS discount_threshold
),
big_orders AS (
SELECT
o.order_id,
o.amount,
o.discount
FROM orders o
CROSS JOIN params p
WHERE o.order_date BETWEEN p.period_start AND p.period_end
AND o.discount > p.discount_threshold
)
SELECT * FROM big_orders
Все параметры — в одном месте сверху. Поменял квартал один раз — везде пересчиталось.
CROSS JOIN здесь — это не страшно.
params возвращает одну строку.
CROSS JOIN просто «прицепляет» эту строку к каждой строке основной таблицы.
🟢 Хотите еще таких лайфхаков ?
🔥 Набираем 70 реакций на этот пост, чтобы подобные посты выходили чаще
Итог: 🤩
🗂 Это один из тех приёмов, который занимает 10 секунд, но экономит кучу времени на поддержке запроса.
❓ А как вы решаете эту проблему — хардкодите или есть другой подход? Пишите в комментах!
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Вам знакома ситуация, когда - написал большой sql запрос для задачи, а потом заказчик говорит: «Покажи то же самое, но за прошлый квартал» ?
И вы начинаете искать дату по всему файлу. Находите все вхождения, правите — и где-то всё равно пропускаешь одно. Запрос считает не то.
В общем очень много рутины.
🟢 В Python мы бы написали переменную в начале и пере использовали ее везде:
start_date = "2024-01-01"
discount_threshold = 0.10
🟢 Но в SQL тоже можно кое что придумать:
WITH params AS (
SELECT
DATE '2024-01-01' AS period_start,
DATE '2024-03-31' AS period_end,
0.10 AS discount_threshold
),
big_orders AS (
SELECT
o.order_id,
o.amount,
o.discount
FROM orders o
CROSS JOIN params p
WHERE o.order_date BETWEEN p.period_start AND p.period_end
AND o.discount > p.discount_threshold
)
SELECT * FROM big_orders
Все параметры — в одном месте сверху. Поменял квартал один раз — везде пересчиталось.
CROSS JOIN здесь — это не страшно.
params возвращает одну строку.
CROSS JOIN просто «прицепляет» эту строку к каждой строке основной таблицы.
🟢 Хотите еще таких лайфхаков ?
🔥 Набираем 70 реакций на этот пост, чтобы подобные посты выходили чаще
Итог: 🤩
🗂 Это один из тех приёмов, который занимает 10 секунд, но экономит кучу времени на поддержке запроса.
❓ А как вы решаете эту проблему — хардкодите или есть другой подход? Пишите в комментах!
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit