Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Database
  • Начало работы
    • Обзор
    • Создание базы данных
    • YQL
      • Работа с данными
      • Работа с YDB CLI
      • Работа с YDB SDK
    • Document API
      • Работа с данными
      • Работа с инструментами AWS
        • Настройка окружения
  • Пошаговые инструкции
    • Работа с YDB CLI
      • Структура и описание команд YDB CLI
      • Получение информации об объекте схемы
      • Потоковое чтение таблицы
      • Работа со вторичными индексами
    • Использование плана запроса и AST
    • Управление базами данных
    • Подключение к базе данных
    • Управление таблицами
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Работа с SDK
  • Концепции
    • Обзор
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Типы данных
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Термины и определения
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
    • Обзор
    • Бессерверный режим
    • Режим с выделенными инстансами
  • Рекомендации
    • Проектирование схемы
    • Партицирование таблиц
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • YDB API и справочник
    • Ограничения базы данных
    • Обработка ошибок в API
  • HTTP API, совместимый с Amazon DynamoDB
    • Справочник API
      • Все методы
      • Actions
        • BatchGetItem
        • BatchWriteItem
        • CreateTable
        • DeleteItem
        • DeleteTable
        • DescribeTable
        • GetItem
        • ListTables
        • PutItem
        • Query
        • Scan
        • TransactGetItems
        • TransactWriteItems
        • UpdateItem
      • Общие ошибки
  • Справочник YQL
    • Обзор
    • Типы данных
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
    • Синтаксис
      • Неподдерживаемые конструкции
      • Работа с текстовым представлением типов данных
      • Выражения
      • CREATE TABLE
      • DROP TABLE
      • INSERT INTO
      • UPSERT INTO
      • REPLACE INTO
      • UPDATE
      • DELETE
      • SELECT
      • GROUP BY
      • JOIN
      • FLATTEN
      • ACTION
      • DISCARD
      • PRAGMA
      • DECLARE
      • OVER, PARTITION BY и WINDOW
    • Встроенные функции
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы с JSON
      • Для работы со структурами
      • Для работы с типами
    • Предустановленные пользовательские функции
      • HyperScan
      • Pcre
      • Pire
      • Re2
      • String
      • Unicode
      • Datetime
      • Url
      • Ip
      • Digest
      • Math
      • Histogram
    • Работа с текстовым представлением типов данных
  • Туториал YQL
    • Обзор
    • Создание таблицы
    • Добавление данных в таблицу
    • Выборка данных из всех колонок
    • Выборка данных из определенных колонок
    • Сортировка и фильтрация
    • Агрегирование данных
    • Дополнительные условия выборки
    • Объединение таблиц с помощью JOIN
    • Вставка и модификация данных с помощью REPLACE
    • Вставка и модификация данных с помощью UPSERT
    • Вставка данных с помощью INSERT
    • Обновление данных с помощью UPDATE
    • Удаление данных
    • Добавление и удаление колонок
    • Удаление таблицы
  • Обслуживание
    • Резервное копирование
  • Диагностика
    • Системные таблицы
  • Вопросы и ответы
    • Общие вопросы
    • Ошибки
    • YQL
    • Все вопросы на одной странице
  • Публичные материалы
  1. Справочник YQL
  2. Синтаксис
  3. GROUP BY

GROUP BY

  • ROLLUP, CUBE и GROUPING SETS
    • GROUPING
  • DISTINCT
  • HAVING

Группирует результаты SELECT по значениям указанных столбцов или выражений. Вместе с GROUP BY часто применяются агрегатные функции (COUNT, MAX, MIN, SUM, AVG) для выполнения вычислений в каждой группе.

Синтаксис

SELECT                               -- столбцы, которые не входят в AGGREGATE_FUNCTION
    column1, column2, ... column_n   -- и должны быть включены в GROUP BY

AGGREGATE_FUNCTION                   -- функция COUNT, SUM, MAX, MIN, SUM или AVG        
    (aggregate_column)               -- аргумент агрегатной функции

FROM table

GROUP by                             -- при группировке по выражению ему задается имя
    column1, column2, ... column_n   -- через AS в GROUP BY,
                                     -- а в SELECT используется заданное имя

Примечание

По умолчанию агрегатные функции не учитывают NULL в своих аргументах.

Также в YQL доступен механизм фабрик агрегатных функций, реализованный с помощью функций AGGREGATION_FACTORY и AGGREGATE_BY.

Примеры

SELECT key, COUNT(*) FROM my_table
GROUP BY key;
SELECT double_key, COUNT(*) FROM my_table
GROUP BY key + key AS double_key;

ROLLUP, CUBE и GROUPING SETS

Результаты вычисления агрегатной функции в виде промежуточных итогов для групп и общих итогов для отдельных столбцов или всей таблицы.

Синтаксис

SELECT 
    c1, c2,                          -- столбцы, по которым производится группировка

AGGREGATE_FUNCTION(c3) AS outcome_c  -- агрегатная функция (SUM, AVG, MIN, MAX, COUNT)

FROM table_name

GROUP BY
    GROUP_BY_EXTENSION(c1, c2)       -- расширение GROUP BY: ROLLUP, CUBE или GROUPING SETS
  • ROLLUP — группирует значения столбцов в порядке их перечисления в аргументах (строго слева направо), формирует промежуточные итоги для каждой группы и общий итог.
  • CUBE — группирует значения для всех возможных комбинаций столбцов, формирует промежуточные итоги для каждой группы и общий итог.
  • GROUPING SETS — задает группы для промежуточных итогов.

ROLLUP, CUBE и GROUPING SETS можно комбинировать через запятую.

GROUPING

В промежуточном итоге значения столбцов, которые не участвуют в вычислениях, заменяются на NULL. В общем итоге на NULL заменяются значения всех столбцов. GROUPING — функция, которая позволяет отличить исходные значения NULL от NULL, которые были добавлены при формировании общих и промежуточных итогов.

GROUPING возвращает битовую маску:

  • 0 — NULL для исходного пустого значения.
  • 1 — NULL, добавленный для промежуточного или общего итога.

Пример

SELECT
    column1,
    column2,
    column3,

    CASE GROUPING(
        column1,
        column2,
        column3,
    )
        WHEN 1  THEN "Subtotal: column1 and column2"
        WHEN 3  THEN "Subtotal: column1"
        WHEN 4  THEN "Subtotal: column2 and column3"
        WHEN 6  THEN "Subtotal: column3"
        WHEN 7  THEN "Grand total"
        ELSE         "Individual group"
    END AS subtotal,

    COUNT(*) AS rows_count

FROM my_table

GROUP BY
    ROLLUP(
        column1,
        column2,
        column3
    ),
    GROUPING SETS(
        (column2, column3),
        (column3)
        -- если добавить cюда ещё (column2), то в сумме
        -- эти ROLLUP и GROUPING SETS дали бы результат,
        -- аналогичный CUBE
    )
;

DISTINCT

Применение агрегатных функций только к уникальным значениям столбца.

Примечание

Применение DISTINCT к вычислимым значениям на данный момент не реализовано. С этой целью можно использовать подзапрос или выражение GROUP BY ... AS ....

Пример

SELECT
  key,
  COUNT(DISTINCT value) AS count -- топ-3 ключей по количеству уникальных значений
FROM my_table
GROUP BY key
ORDER BY count DESC
LIMIT 3;

Также ключевое слово DISTINCT может использоваться для выборки уникальных строк через SELECT DISTINCT.

HAVING

Фильтрация выборки SELECT по результатам вычисления агрегатных функций. Синтаксис аналогичен конструкции WHERE.

Пример

SELECT
    key
FROM my_table
GROUP BY key
HAVING COUNT(value) > 100;
В этой статье:
  • ROLLUP, CUBE и GROUPING SETS
  • GROUPING
  • DISTINCT
  • HAVING
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»