【发布时间】:2021-09-04 13:00:27
【问题描述】:
我正在尝试确定每个给定行所属的 ROLLUP 报告的“级别”。当初始数据不包含空值时,可以只计算每一行中的空值(对于每个给定的分组级别/层,空单元格的数量是相同的),尽管在我看来它也不是一个漂亮的解决方案。
如果初始数据包含 NULL,则此解决方法不再有效:在示例查询结果表中,您会看到 <null> 来自真正的 null,而 (null) 是分组单元格的标准 NULL 占位符。
我希望在分层查询中找到类似于“虚拟列”的内容(如LEVEL、PATH 等)。
PostgreSQL v12 中是否有一种自然的方式来确定使用ROLLUP(通常使用GROUPING SETS)构建的报告中的行级别?
ROLLUP查询结果示例:
select a, b, sum(d.c)
from(
select null as a, 2 as b, 1 as c
union all
select null as a, 3 as b, 1 as c
union all
select 'a1' as a, 4 as b, 1 as c
union all
select 'a1' as a, 5 as b, 1 as c
union all
select 'a2' as a, 6 as b, 1 as c
) d GROUP by ROLLUP (d.a, d.b)
| a | b | sum |
--------------------------
| (null) | (null) | 5 |
| a1 | 5 | 1 |
| <null> | 2 | 1 |
| a1 | 4 | 1 |
| a2 | 6 | 1 |
| <null> | 3 | 1 |
| a2 | (null) | 1 |
| <null> | (null) | 2 |
| a1 | (null) | 2 |
--------------------------
【问题讨论】:
标签: sql postgresql postgresql-12 grouping-sets