ON CONFLICT DO NOTHING — апсерты без ошибок!
Когда вы вставляете данные в таблицу с уникальными ограничениями, может прилететь ошибка: дубликат ключа нарушает уникальность. Особенно обидно, если часть данных уже вставлена, а часть — нет.
Чтобы обойти это — используем
Допустим, у нас есть таблица с пользователями, где email должен быть уникальным:
Попробуем вставить сразу несколько строк, включая дубликат:
Результат будет неудачным — Postgres выдаст ошибку и отменит всю операцию. Однако с
🔥 Теперь база данных вставит только уникальные строки, а повторяющиеся — просто пропустит без лишнего шума.
➡️ SQL Ready | #практика
Когда вы вставляете данные в таблицу с уникальными ограничениями, может прилететь ошибка: дубликат ключа нарушает уникальность. Особенно обидно, если часть данных уже вставлена, а часть — нет.
Чтобы обойти это — используем
ON CONFLICT DO NOTHING
. Он просто пропустит строки, которые уже есть.Допустим, у нас есть таблица с пользователями, где email должен быть уникальным:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE
);
Попробуем вставить сразу несколько строк, включая дубликат:
INSERT INTO users (email)
VALUES ('[email protected]'),
('[email protected]'),
('[email protected]'); -- дубликат!
Результат будет неудачным — Postgres выдаст ошибку и отменит всю операцию. Однако с
ON CONFLICT
всё работает иначе:INSERT INTO users (email)
VALUES ('[email protected]'),
('[email protected]'),
('[email protected]')
ON CONFLICT DO NOTHING;
🔥 Теперь база данных вставит только уникальные строки, а повторяющиеся — просто пропустит без лишнего шума.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍8🔥6
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🔥8👍4🤝3
В этой задаче напишем SQL-запрос, который поможет построить отчёт по неоплаченным счетам и оценить просроченную дебиторскую задолженность.
Что делаем:
• Распределяем счета по корзинам: 0-30, 31-60, 61-90, 90+ дней просрочки.
• Считаем сумму, количество и долю задолженности по каждой корзине.
• Строим топ-5 крупнейших должников с просрочкой более 60 дней.
Такой отчёт позволяет увидеть, где «зависли» деньги, и помогает сфокусироваться на проблемных клиентах
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤5👍5
С помощью LATERAL можно использовать значения из текущей строки в подзапросе — как будто передаёшь параметры в функцию.
Что важно знать:
• LATERAL делает подзапросы внутри JOIN «осведомлёнными» о текущей строке.
• Удобно, когда нужно посчитать агрегаты или достать top-N из связанных таблиц.
• Отлично работает с jsonb, позволяя обойтись без оконных функций.
Инструмент, с которым сложные запросы станут в разы проще.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤8👍5🤝2
FILTER
позволяет задать условие прямо для SUM
, COUNT
, AVG
— без вложенных подзапросов и лишнего шума. Код получается чище, короче и проще читается.Что важно знать:
• FILTER работает внутри агрегата — условие применяется только к нему.
• Отлично подходит для отчётных таблиц с множеством условий.
• Заменяет CASE WHEN в 90% ситуаций, где раньше казалось без него никак.
Поэтому, это инструмент, с которым SQL-запросы становятся короче и понятнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍9🤝8❤6