可使用分组集计算多级聚合。此方法的优势在于,可以在单个 SQL 语句中计算多级分组。
例如:
SELECT publisher, name, year, SUM(price)
FROM :it_publishers, :it_books
WHERE publisher=pub_id AND crcy=:currency
GROUP BY GROUPING SETS ((publisher, name, year), (year))
要检索不同级别的聚合,客户端通常必须重复检查结果,例如,通过对分组属性按 NULL 进行过滤。 在多级聚合的特殊情况下,SQLScript 可以在更精细的分组下利用结果来计算粗略的聚合,并在不同的表变量中返回组的不同粒度。这样可以节省客户端重新检查查询结果的工作量。考虑 SQLScript 中表示的上述多级聚合:
books_ppy = SELECT publisher, name, year, SUM(price)
FROM :it_publishers, :it_books
WHERE publisher = pub_id AND crcy = :currency
GROUP BY publisher, name, year;
books_py = SELECT year, SUM(price)
FROM :books_ppy
GROUP BY year;