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
🖥 Напоминалка по группировке и агрегатам 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
Проверяем дубликаты и считаем уникальные значения!

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

Создадим таблицу пользователей:
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


🔥 Это простой способ контролировать качество данных, выявлять ошибки и готовить отчёты для команды.

➡️ SQL Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥136🤝1
🖥 Накопительные итоги — running totals без циклов!

Хотите видеть, как растут продажи день за днём или отслеживать баланс по пользователям? С функциями SQL можно посчитать нарастающий итог прямо в одном запросе.

Сегодня в посте:
Считаем общий running total по датам.

Считаем накопительные суммы отдельно для каждого пользователя.

Контролируем диапазон расчёта с ROWS BETWEEN.


Это делает SQL-запросы компактными, наглядными и готовыми к использованию в отчётах.

➡️ SQL Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
18👍10🔥7🤝3