GROUPING
(day, month, year), и вычисляет промежуточные итоги на каждом уровне агрегации, а затем общий итог. CUBE вычисляет промежуточные итоги для всех возможных комбинаций указанных столбцов. GROUPING определяет, какие строки, возвращаемые ROLLUP или CUBE, являются суперагрегатами, а какие — строками, которые вернул бы GROUP BY без модификаторов.
Функция GROUPING принимает несколько столбцов в качестве аргумента и возвращает битовую маску.
1указывает, что строка, возвращаемая модификаторомROLLUPилиCUBEвGROUP BY, является промежуточным итогом0указывает, что строка, возвращаемаяROLLUPилиCUBE, не является промежуточным итогом
GROUPING SETS
Загрузите пример данных
Простые запросы
Сравнение нескольких команд GROUP BY с GROUPING SETS
Сравнение CUBE и GROUPING SETS
CUBE(datacenter,distro,version), задает иерархию, которая может быть не вполне осмысленной. Нет смысла сравнивать Version между двумя дистрибутивами одновременно, поскольку у Arch и RHEL разные циклы выпуска и разные стандарты именования версий. Пример с GROUPING SETS, приведенный ниже, здесь уместнее, так как distro и version группируются в одном наборе.
Версия в приведённом выше примере может быть не слишком осмысленной, если она не привязана к дистрибутиву. Если бы мы отслеживали версию ядра, это имело бы больше смысла, поскольку версия ядра может относиться к любому дистрибутиву. В таком случае лучше использовать GROUPING SETS, как в следующем примере.