首页 > 解决方案 > 在表中生成不同维度的列表

问题描述

我有一个包含 3 个维度的表 - A、B 和 C。我基本上想要这些维度的所有可能组合的值,并在不存在组合时将所有度量 (M) 填充为 0。

假设我有桌子-

在此处输入图像描述

如果我这样做,我会得到 -


select a,b,c from sum(m) fact group by a,b,c

在此处输入图像描述

但我想要所有可能的组合,-

在此处输入图像描述

目前,我正在做一个像下面这样的交叉连接,但是有没有更快的方法来做到这一点(因为我的表有大约 1M 的记录)?-

select * from (
select distinct f1.a, f2.b, f3.c 
from fact f1 
cross join fact f2 
cross join fact f3 ) all
left join 
( select a,b,c from sum(m) fact group by a,b,c) s
on all.a=s.a and all.b=s.b and all.c=s.c

标签: mysqlsqldatabaseoracledata-warehouse

解决方案


MySQL:

GROUP BY a,b,c将为表中存在的每个组合生成 1 行。

如果您想要所有可能的组合,您需要再构建 1(或 3)个表来列出所有可能的值,然后LEFT JOIN从中执行。您可能还想COALESCE(col, 0)变成NULLs零。


推荐阅读