如何在没有单独选择语句的情况下在更高级别聚合数据?



我有我想在特定级别聚合的数据,但也要在更广泛/更高级别聚合。例如,假设我有全国商店的销售数据,并且我还想按州和地区(几个州合并)查看汇总数据。

所以数据粒度是这样的:Year|Store|State|Sales.某些State字段以区域标记为前缀,以允许按该区域进行分组。因此,在太平洋西北部,华盛顿州、俄勒冈州和蒙大拿州都以PNW-为前缀。

这个查询主要让我得到我正在寻找的内容:

SELECT
Store, State, Year, avg(Sales)
FROM sales
GROUP BY Store, State, Year

但是,假设我还想将一个州区域分组在一起,作为另一个分组。我希望该分组中所有州的数据仍作为单独的行,以及区域分组。

有没有办法做到这一点而不必执行其他一些选择语句并重新连接到上面的查询?

Larnu 是对的,你应该使用分组集

with
sales_with_region as (
select
Store,
left(State, 4) as Region, -- use only if it is always first 4 symbols
State,
Year,
Sales
from
sales
)
select
Store,
Region,
coalesce(State, 'TOTAL') as State,
Year,
avg(Sales) as avg_sales
from
sales_with_region
group by
grouping sets (
(Store, Region, State, Year),
(Store, Region, Year)
)

最新更新