TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI)

8 Jun, 08:59

Открыть в Telegram Поделиться Пожаловаться

📊 SQL трюк — как добавить строку «Все категории» к любому отчёту через ROLLUP (ЧАСТЬ 2):

В прошлом посте мы добавляли итоговую строку через UNION ALL — это рабочий метод, но есть способ элегантнее.

Знакомьтесь:
GROUP BY ROLLUP — встроенный механизм SQL для автоматических итогов.

🟢 Что такое ROLLUP на пальцах:

ROLLUP — это расширение GROUP BY, которое автоматически добавляет строки с агрегатными итогами. Вместо того чтобы писать второй запрос и клеить через UNION ALL — просто добавляем одно слово

🟢 Шаг 1 — пишем запрос с ROLLUP:

SELECT
category,
SUM(revenue) AS total_revenue,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY ROLLUP(category)

Результат:
category | total_revenue | orders_count
Одежда | 7000 | 2
Обувь | 1200 | 1
Техника | 2500 | 1
NULL | 10700 | 4

Итоговая строка появилась автоматически, но в поле category стоит NULL — это сигнал ROLLUP, что строка является итогом по всей группе.

🟢 Шаг 2 — заменяем NULL на «Все категории»:

Используем COALESCE, чтобы подменить NULL на читаемую метку:
SELECT
COALESCE(category, 'Все категории') AS category,
SUM(revenue) AS total_revenue,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY ROLLUP(category)

Результат:
category | total_revenue | orders_count
Одежда | 7000 | 2
Обувь | 1200 | 1
Техника | 2500 | 1
Все категории | 10700 | 4

Чисто и лаконично — никакого второго запроса.

🟢 Важный момент — а что если в данных уже есть NULL в category?

Представим, что в таблице есть строки с незаполненной категорией:
order_id | category | revenue
1 | Одежда | 1500
2 | Обувь | 1200
3 | NULL | 800 ← категория не указана
4 | Одежда | 5500

Запускаем запрос с COALESCE — и получаем проблему:
category | total_revenue | orders_count
Одежда | 7000 | 2
Обувь | 1200 | 1
Все категории | 800 | 1 ← это был NULL из данных!
Все категории | 10700 | 4 ← это реальный итог ROLLUP

COALESCE не различает: это NULL из данных или NULL от ROLLUP — он заменяет оба.

🟢 Решение — используем GROUPING():

Функция GROUPING(column) возвращает 1, если строка итоговая (от ROLLUP), и 0 — если это обычная строка с NULL из данных:
SELECT
CASE
WHEN GROUPING(category) = 1 THEN 'Все категории'
ELSE COALESCE(category, 'Не указана')
END AS category,
SUM(revenue) AS total_revenue,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY ROLLUP(category)
ORDER BY
GROUPING(category),
category

Результат:
category | total_revenue | orders_count
Не указана | 800 | 1 ← NULL из данных
Одежда | 7000 | 2
Обувь | 1200 | 1
Все категории | 10700 | 4 ← итог ROLLUP

Теперь всё на своих местах.

🟢 Хотите еще таких лайфхаков ?
🔥 Набираем 70 реакций на этот пост, чтобы подобные посты выходили чаще

Итог: 🤩

❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А знали про ROLLUP и GROUPING() раньше? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.


🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru


@dima_sqlit

1.2k 0 22 20 44
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot