Думаю многим кажется, что SQL довольно простой и язык, но на самом деле чтобы его по-настоящему освоить недостаточно знать базовые операции и оконные функции. По личному опыту видел, что многие не знают очень классные функции - cube, grouping_sets.
Если вы работаете с неаддитивность метриками (например dau, mau) и вам нужно посчитать тоталы и субтоталы, то это просто незаменимые функции.
При добавлении в group by строчки cube(1,2) в вашем запросе появятся null в столбцах по которым вы производите группировку - это и будет тотальное значение по столбцу. При группировке по >1 столбу вы увидите пересечение null одного разреза с не null другого - это субтоталы. Заменяя null на Any вы сможете сделать удобную кубическую витрину.
Отличием функций ROLLUP, CUBE и GROUPING SETS:
ROLLUP – рассчитывает промежуточные итоги для каждого указанного элемента и общий итог.
CUBE — рассчитывает результаты для всех возможных перекрестных вычислений.
GROUPING SETS – рассчитывает результаты нескольких группировок в один набор данных ( по сути эквивалентен конструкции union all к указанным группам).