Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤12👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивный сайт, где вы учитесь писать SQL-запросы в игровой форме. Всё происходит прямо в браузере: пишете запрос — сразу видите результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤10🔥9
Подходит для задач вроде «последний заказ клиента» или «первая операция по счёту». Работает компактно и быстрее оконных функций, если нужен один результат на группу.
Что важно знать:
• Используется с ORDER BY — сначала поле из DISTINCT ON, затем сортировка внутри групп.
• Без ORDER BY результат непредсказуем — зависит от физического порядка строк.
• Альтернатива ROW_NUMBER() — тот же результат, но без подзапросов и лишнего кода.
DISTINCT ON — мощный инструмент в арсенале PostgreSQL, когда важна лаконичность и производительность.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤7👍6🤝2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤6👍5
В этой статье:
• Пошаговая сборка MariaDB из исходников и первые «твики» результатов
• Реализация минимального движка MEMEM с поддержкой CREATE/INSERT/SELECT
• Отличие API движков хранения MariaDB от Postgres
🔊 Подробное руководство лежит на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥4
PARTITION PRUNING — читаем только нужные данные!
Когда таблица разрастается до сотен миллионов строк, даже простые запросы начинают тормозить. Но часто нам нужен только один месяц — зачем читать всё?
Чтобы ускорить выборку, разобьём таблицу на разделы по дате с помощью range partitioning:
Теперь создадим конкретные партиции — каждая отвечает за свой месяц:
Представим, что нам нужно посчитать сумму продаж только за январь 2024 года:
Добавим
🔥 Важно: pruning работает только, если условие по дате написано явно — без функций, кастов и переменных.
➡️ SQL Ready | #практика
Когда таблица разрастается до сотен миллионов строк, даже простые запросы начинают тормозить. Но часто нам нужен только один месяц — зачем читать всё?
Чтобы ускорить выборку, разобьём таблицу на разделы по дате с помощью range partitioning:
CREATE TABLE sales (
sale_date DATE,
amount NUMERIC
) PARTITION BY RANGE (sale_date);
Теперь создадим конкретные партиции — каждая отвечает за свой месяц:
CREATE TABLE sales_2024_01 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
CREATE TABLE sales_2024_02 PARTITION OF sales
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
Представим, что нам нужно посчитать сумму продаж только за январь 2024 года:
SELECT SUM(amount)
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';
Добавим
EXPLAIN ANALYZE
, чтобы увидеть, как именно Postgres выполняет запрос:EXPLAIN ANALYZE
SELECT SUM(amount)
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';
🔥 Важно: pruning работает только, если условие по дате написано явно — без функций, кастов и переменных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤6🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собраны задания, распределённые по темам — от простых выборок до сложных подзапросов и агрегирования. Каждое упражнение снабжено детальным разбором и готовым решением
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
В этой задаче напишем SQL-запрос, который поможет выявить, как часто пользователи отменяют заказы за последние 90 дней — и покажем это в разрезе дней и недель.
Что делаем:
• Считаем общее количество заказов и отдельно — отменённые (status = 'canceled').
• Используем CTE для упрощения структуры запроса и фильтрацию по последним 90 дням.
• Группируем по неделям с помощью DATE_TRUNC, чтобы отследить тренды.
Если процент отмен выше 7 % — это сигнал для бизнеса: стоит проверить, не возникают ли сбои в доставке, оплате или интерфейсе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤6👍4