Я считаю, что grouping sets
гораздо более гибок, чем rollup
.Я бы написал так:
select coalesce(book_name,
replace('total_books=@x', '@x', count(*))
) as book_name,
col2, col3, sum(whatever)
from t
group by grouping sets ( (book_name), () );
Строго говоря, функция GROUPING
с CASE
лучше, чем COALESCE()
.Однако значения NULL
на ключах группировки встречаются довольно редко.