Составные столбцы

Составной столбец – это коллекция столбцов, рассматриваемых как один блок в процессе вычисления группирований.

Составные столбцы

Столбцы задаются в скобках, как в следующей инструкции: ROLLUP (a, (b, c), d)

  • Составной столбец – это коллекция столбцов, рассматриваемых как один блок.

  • Используйте скобки в предложении GROUP BY для группирования столбцов, чтобы они рассматривались как один блок для операций ROLLUP или CUBE.

  • При использовании с операторами ROLLUP или CUBE составные столбцы требуют пропуска агрегирования для определенных уровней.

Здесь выражение (b, c) образует составной столбец и рассматривается как один блок. В общем случае составные столбцы полезны в операторах ROLLUP, CUBE и GROUPING SETS. Например, в ROLLUP или CUBE составные столбцы потребовали бы пропуска агрегирования для определеных уровней.

То есть предложение GROUP BY ROLLUP(a, (b, c) ) эквивалентно:

    GROUP BY a, b, c UNION ALL
GROUP BY a UNION ALL
GROUP BY ()

Здесь (b, c) рассматривается как единый блок, а ROLLUP не применяется к (b, c). Это похоже на использование псевдонима – например, z как псевдонима для (b, c), а выражение GROUP BY при этом сводится к: GROUP BY ROLLUP(a, z).

Примечание. GROUP BY( ) обычно является инструкцией SELECT со значениями NULL для столбцов a и b и является только функцией агрегирования. Эта предложение обычно используется для генерации общих итогов.

    SELECT NULL, NULL, aggregate_col
FROM
GROUP BY ( );

Сравните с обычным использованием ROLLUP, например:

    GROUP BY ROLLUP(a, b, c)

Это можно было бы представить как:

    GROUP BY a, b, c UNION ALL
GROUP BY a, b UNION ALL
GROUP BY a UNION ALL
GROUP BY ()

Аналогично:

    GROUP BY CUBE((a, b), c)

Это было бы эквивалентно:

    GROUP BY a, b, c UNION ALL
GROUP BY a, b UNION ALL
GROUP BY c UNION ALL
GROUP By ()

В следующей таблице приведена спецификация GROUPING SETS и эквивалентная спецификация GROUP BY.

Далее: Обзор использования подзапросов

Статьи по теме
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)