В этой шпаргалке — основные методы работы с временными структурами данных: создание и очистка временных таблиц, управление содержимым транзакций, использование CTE и параметров ON COMMIT. Эти приёмы применяются при оптимизации сложных запросов, промежуточных расчётах и обработке данных в сессиях или ETL-процессах.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥6🤝5
Исключение строк в оконных функциях!
Иногда при расчётах нужно не учитывать текущую строку или соседние — например, чтобы не искажать среднее значение. Для этого в SQL есть оператор
Сначала исключим текущую строку:
Исключаем все строки с одинаковым значением сортировки:
Исключаем только строки с тем же значением
🔥 Так
➡️ SQL Ready | #практика
Иногда при расчётах нужно не учитывать текущую строку или соседние — например, чтобы не искажать среднее значение. Для этого в SQL есть оператор
EXCLUDE - задаёт, какие строки исключать из окна.Сначала исключим текущую строку:
SELECT id, value,
AVG(value) OVER (
ORDER BY id
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
EXCLUDE CURRENT ROW
) AS avg_without_current
FROM data;
Исключаем все строки с одинаковым значением сортировки:
SELECT id, category, value,
SUM(value) OVER (
ORDER BY category
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
EXCLUDE GROUP
) AS sum_without_group
FROM data;
Исключаем только строки с тем же значением
ORDER BY (ties):SELECT id, score,
COUNT(*) OVER (
ORDER BY score
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
EXCLUDE TIES
) AS cnt_without_ties
FROM data;
🔥 Так
EXCLUDE помогает гибко управлять рамкой окна — исключая нужные строки из расчётов без изменения общей логики запроса.Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤8🔥6
Вместо двух операций можно сделать всё сразу: изменить данные и получить результат. Этот приём экономит запросы и делает SQL гораздо удобнее.
В сегодняшнем гайде:
• Обновляем данные по связанной таблице и сразу видим результат;
• Используем подзапросы и фильтры для выборочного обновления;
• Узнаём, как RETURNING превращает UPDATE в инструмент аналитики;
Комбо, которое позволяет объединить обновление, логику и проверку результата в одном шаге.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥8❤6
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь научиться работать с базами данных - от простых запросов до глубоких фич PostgreSQL? На Neon ты найдёшь полное руководство: как начать, как писать запросы, работать с транзакциями и продвинутыми темами вроде CTE, индексов и триггеров.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍6🤝6
Если нужно посчитать время между событиями (например, между заказами, логинами или платежами). Есть простой и эффективный способ — функция
LAG().Сначала берём дату текущего и предыдущего события для каждого пользователя:
LAG(order_date) OVER (PARTITION BY user_id ORDER BY order_date)
Считаем разницу между ними:
order_date - LAG(order_date) OVER (PARTITION BY user_id ORDER BY order_date)
Чтобы получить средний промежуток:
SELECT user_id,
AVG(order_date - LAG(order_date) OVER (PARTITION BY user_id ORDER BY order_date)) AS avg_gap
FROM orders;
🔥 Так вы узнаете, среднюю частоту заказов по каждому пользователю, без подзапросов, без циклов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤7🔥6🤝1
У каждого пользователя есть десятки отметок с координатами — по ним можно определить, где он бывает чаще всего.
В этой задаче:
• Округлим координаты, чтобы объединить близкие точки;
• Посчитаем частоту появлений по каждой зоне;
• Найдём точку с максимальным количеством визитов — «дом».
В результате получаем инструмент геоаналитики, который помогает определять зоны активности и строить персональные рекомендации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤7🤝6🔥2😁2
Рейтинг активности пользователей в SQL!
Пример практического запроса для аналитики: определяем самых активных пользователей по количеству действий.
Создаём таблицу:
Добавляем данные:
Считаем количество действий:
Добавляем ранжирование:
🔥 Простой способ построить лидерборд или отчет по вовлеченности.
➡️ SQL Ready | #практика
Пример практического запроса для аналитики: определяем самых активных пользователей по количеству действий.
Создаём таблицу:
CREATE TABLE actions (
user_id INT,
action_type TEXT
);
Добавляем данные:
INSERT INTO actions VALUES
(1, 'login'), (1, 'purchase'),
(2, 'login'), (2, 'comment'),
(3, 'login');
Считаем количество действий:
SELECT user_id, COUNT(*) AS total_actions
FROM actions
GROUP BY user_id
ORDER BY total_actions DESC;
Добавляем ранжирование:
SELECT
user_id,
COUNT(*) AS total_actions,
RANK() OVER (ORDER BY COUNT(*) DESC) AS rank
FROM actions
GROUP BY user_id;
🔥 Простой способ построить лидерборд или отчет по вовлеченности.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍9🤝6👎1