SQL Ready | Базы Данных
15.4K subscribers
1.21K photos
67 videos
2 files
587 links
Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3QREBc

Реклама на бирже: https://telega.in/c/sql_ready
Download Telegram
🖥 Анализируем сезонность продаж!

Хотим понять, в какие месяцы и дни недели продажи растут, а в какие падают. Это важно для планирования акций, скидок и оптимизации работы склада и персонала.

В этой задаче:
EXTRACT(MONTH FROM order_date) — чтобы выделить месяц заказа.

EXTRACT(DOW FROM order_date) — чтобы выделить день недели.

COUNT(*) + GROUP BY — считаем количество заказов по каждому месяцу и дню недели.

ORDER BY — сортируем результат для наглядного анализа.


В итоге получаем инструмент для планирования продаж и оптимизации ресурсов.

➡️ SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥85🤝1
Сравнение с предыдущей строкой с LAG()

Хотите узнать, как меняется значение от предыдущей записи? В аналитике это частая задача, и решается с помощью функции 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 — незаменимый инструмент для анализа изменений без подзапросов и джойнов.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍8🔥7
🖥 Напоминалка по группировке и агрегатам PRO!

Приёмы для построения сводных таблиц прямо в SQL: от обычных группировок до динамических комбинаций измерений. В шпаргалке собраны примеры с ROLLUP, CUBE, GROUPING SETS, а также полезные функции GROUPING() и HAVING для тонкой аналитики.

➡️ SQL Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍176🔥6🤝3
🖥 Какие фильмы лидируют в каждом жанре по среднему рейтингу и количеству отзывов?

Для этого посчитаем среднюю оценку, количество голосов и выведем позицию фильма внутри жанра.

В этом посте:
• JOIN — объединяем фильмы, жанры и оценки в единую выборку.

• AVG + COUNT — считаем средний рейтинг и количество отзывов.

• RANK + PARTITION BY — ранжируем фильмы внутри каждого жанра.


В итоге получаем топ фильмов по каждому жанру с учётом рейтинга и популярности.

➡️ SQL Ready | #задача
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 — фильтруем агрегированные данные!

Когда нужно сгруппировать данные и одновременно применить фильтр к агрегатам, обычный 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 применяется после агрегации — сначала агрегируем, потом фильтруем.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥159👍5🤝1
🖥 Анализируем музыкальные тренды!

Хотим узнать, какие жанры и исполнители сейчас популярны, и в какие дни они слушаются чаще всего. Это помогает прогнозировать и подобрать рекомендации для плейлистов.

В этом посте:
EXTRACT(DOW FROM play_time) — выделяем день недели прослушивания.

• EXTRACT(HOUR FROM play_time) — смотрим, в какие часы включают музыку.

• COUNT(*) + GROUP BY — считаем, сколько треков играло по жанрам и времени.

• ORDER BY — сортируем, чтобы увидеть пики популярности.


В итоге получаем SQL-инструмент для поиска «вирусных» жанров и артистов.

➡️ SQL Ready | #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍125🤝4