Сравнение с предыдущей строкой с LAG()
Хотите узнать, как меняется значение от предыдущей записи? В аналитике это частая задача, и решается с помощью функции
Создадим таблицу:
Запрос с LAG():
Пример для клиента с 3 заказами:
Функция
🔥 Так что
➡️ SQL Ready | #практика
Хотите узнать, как меняется значение от предыдущей записи? В аналитике это частая задача, и решается с помощью функции
LAG()Создадим таблицу:
CREATE TABLE sales (
id INT,
customer VARCHAR(100),
amount DECIMAL(10,2)
);
Запрос с LAG():
SELECT id, customer, amount,
LAG(amount, 1) OVER (
PARTITION BY customer
ORDER BY id
) AS prev_amount
FROM sales;
Пример для клиента с 3 заказами:
id | customer | amount | prev_amount
------------------------------------
10 | Ivanov | 500 | NULL
12 | Ivanov | 700 | 500
15 | Ivanov | 650 | 700
Функция
LAG() берёт значение из предыдущей строки в пределах группы. NULL появляется, если предыдущей строки нет. Это позволяет быстро вычислять разницу между заказами:SELECT id, customer, amount,
amount - LAG(amount, 1) OVER (PARTITION BY customer ORDER BY id) AS diff
FROM sales;
🔥 Так что
LAG — незаменимый инструмент для анализа изменений без подзапросов и джойнов.Please open Telegram to view this post
VIEW IN TELEGRAM
❤16👍8🔥7
Приёмы для построения сводных таблиц прямо в SQL: от обычных группировок до динамических комбинаций измерений. В шпаргалке собраны примеры с ROLLUP, CUBE, GROUPING SETS, а также полезные функции GROUPING() и HAVING для тонкой аналитики.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤6🔥6🤝3
Для этого посчитаем среднюю оценку, количество голосов и выведем позицию фильма внутри жанра.
В этом посте:
• JOIN — объединяем фильмы, жанры и оценки в единую выборку.
• AVG + COUNT — считаем средний рейтинг и количество отзывов.
• RANK + PARTITION BY — ранжируем фильмы внутри каждого жанра.
В итоге получаем топ фильмов по каждому жанру с учётом рейтинга и популярности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥9👍4🤝2
GROUP BY с HAVING — фильтруем агрегированные данные!
Когда нужно сгруппировать данные и одновременно применить фильтр к агрегатам, обычный
Посчитаем количество заказов на каждого клиента:
Теперь выберем только тех клиентов, у кого больше 5 заказов:
Можно комбинировать разные агрегаты, например сумма и среднее:
🔥 Но помните: фильтр с
➡️ SQL Ready | #практика
Когда нужно сгруппировать данные и одновременно применить фильтр к агрегатам, обычный
WHERE не работает. HAVING позволяет фильтровать уже агрегированные результаты.Посчитаем количество заказов на каждого клиента:
SELECT CustomerID, COUNT(*) AS OrdersCount
FROM Orders
GROUP BY CustomerID;
Теперь выберем только тех клиентов, у кого больше 5 заказов:
SELECT CustomerID, COUNT(*) AS OrdersCount
FROM Orders
GROUP BY CustomerID
HAVING COUNT(*) > 5;
Можно комбинировать разные агрегаты, например сумма и среднее:
SELECT CustomerID, SUM(TotalAmount) AS Total, AVG(TotalAmount) AS AvgOrder
FROM Orders
GROUP BY CustomerID
HAVING SUM(TotalAmount) > 1000;
🔥 Но помните: фильтр с
HAVING применяется после агрегации — сначала агрегируем, потом фильтруем.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤9👍5🤝1
Хотим узнать, какие жанры и исполнители сейчас популярны, и в какие дни они слушаются чаще всего. Это помогает прогнозировать и подобрать рекомендации для плейлистов.
В этом посте:
• EXTRACT(DOW FROM play_time) — выделяем день недели прослушивания.
• EXTRACT(HOUR FROM play_time) — смотрим, в какие часы включают музыку.
• COUNT(*) + GROUP BY — считаем, сколько треков играло по жанрам и времени.
• ORDER BY — сортируем, чтобы увидеть пики популярности.
В итоге получаем SQL-инструмент для поиска «вирусных» жанров и артистов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍12❤5🤝4
Проверяем дубликаты и считаем уникальные значения!
В больших таблицах важно быстро находить повторяющиеся записи и понимать, сколько уникальных элементов. Это полезно для контроля качества данных и аналитики.
Создадим таблицу пользователей:
Запрос для выявления дубликатов и подсчёта уникальных email:
Функция
Результат:
🔥 Это простой способ контролировать качество данных, выявлять ошибки и готовить отчёты для команды.
➡️ SQL Ready | #практика
В больших таблицах важно быстро находить повторяющиеся записи и понимать, сколько уникальных элементов. Это полезно для контроля качества данных и аналитики.
Создадим таблицу пользователей:
CREATE TABLE users (
user_id INT,
email VARCHAR(100)
);
INSERT INTO users VALUES
(1, 'alice@mail.com'),
(2, 'bob@mail.com'),
(3, 'alice@mail.com'),
(4, 'carol@mail.com'),
(5, 'bob@mail.com');
Запрос для выявления дубликатов и подсчёта уникальных email:
SELECT email, COUNT(*) AS cnt,
CASE WHEN COUNT(*)>1 THEN 'Duplicate' ELSE 'Unique' END AS status
FROM users
GROUP BY email;
Функция
COUNT() + GROUP BY группирует одинаковые значения, а CASE сразу классифицирует их как дубликаты или уникальные.Результат:
email | cnt | status
-----------------------------
alice@mail.com | 2 | Duplicate
bob@mail.com | 2 | Duplicate
carol@mail.com | 1 | Unique
🔥 Это простой способ контролировать качество данных, выявлять ошибки и готовить отчёты для команды.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥13❤6🤝1