С помощью 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❤9👍5🤝3
FILTER
позволяет задать условие прямо для SUM
, COUNT
, AVG
— без вложенных подзапросов и лишнего шума. Код получается чище, короче и проще читается.Что важно знать:
• FILTER работает внутри агрегата — условие применяется только к нему.
• Отлично подходит для отчётных таблиц с множеством условий.
• Заменяет CASE WHEN в 90% ситуаций, где раньше казалось без него никак.
Поэтому, это инструмент, с которым SQL-запросы становятся короче и понятнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍10🤝8❤6
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь публикуются ежедневные статьи, обучающие серии Stairway, подборки скриптов, обзоры книг, а также активные форумы и блоги для администраторов БД и разработчиков.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍9🔥6
CHECK-ограничения — валидация данных на уровне базы!
Представим, что мы хотим убедиться, что цена товара всегда больше нуля:
Теперь добавим ограничение, чтобы процент скидки был в пределах от 0 до 100:
И создадим таблицу событий, где дата начала всегда должна быть раньше даты окончания:
🔥 Но помните, что
➡️ SQL Ready | #практика
CHECK
позволяет задать правила, которым обязана соответствовать каждая строка в таблице. Это удобно, когда нужно гарантировать корректные значения без сторонней логики.Представим, что мы хотим убедиться, что цена товара всегда больше нуля:
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
name TEXT,
price NUMERIC(10,2),
CHECK (price > 0)
);
Теперь добавим ограничение, чтобы процент скидки был в пределах от 0 до 100:
ALTER TABLE discounts
ADD CONSTRAINT percent_range_chk
CHECK (percentage BETWEEN 0 AND 100);
И создадим таблицу событий, где дата начала всегда должна быть раньше даты окончания:
CREATE TABLE events (
id SERIAL PRIMARY KEY,
starts_at TIMESTAMP,
ends_at TIMESTAMP,
CHECK (starts_at < ends_at)
);
🔥 Но помните, что
CHECK
проверяет только вставляемые или обновлённые строки. Если вы добавляете ограничение в таблицу с данными, указывайте NOT VALID
, чтобы временно обойти проверку.Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥9❤6
Каждый уровень играет важную роль: от физической передачи сигналов до приложений, с которыми мы взаимодействуем каждый день. Понимание этой модели помогает лучше разбираться в сетевых ошибках, маршрутизации и защите данных.
На картинке — 7 уровней OSI, что делает каждый из них и примеры протоколов.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤8🔥6🤝2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤10🤝8👍5
❤15🔥8👍4👎2😁2
В этой задаче напишем SQL-запрос, который поможет определить, сколько клиентов сделали повторный заказ за последние 90 дней — и посчитаем, какую долю составляют такие заказы.
Что делаем:
• Считаем количество заказов по каждому клиенту за последние 90 дней.
• Отбираем тех, у кого 2+ заказов — это лояльные клиенты.
• Считаем, какой процент заказов пришёл от них.
Анализ повторных заказов — отличный способ измерить удержание, качество сервиса и лояльность клиентов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤7👍5