mysql - 在表中生成不同维度的列表
问题描述
我有一个包含 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
解决方案
MySQL:
GROUP BY a,b,c
将为表中存在的每个组合生成 1 行。
如果您想要所有可能的组合,您需要再构建 1(或 3)个表来列出所有可能的值,然后LEFT JOIN
从中执行。您可能还想COALESCE(col, 0)
变成NULLs
零。
推荐阅读
- awk - 将最大值除以第二大值
- javascript - 未捕获的类型错误:this.activeArray[i] 未定义
- distribution - 给定一个边际分布和另一组数据,你能削减数据以匹配边际分布吗?
- unity3d - 自定义值滑块统一
- python-sphinx - 如何将带有 Sphinx 和 myst-parser 的 Markdown 导入 Readthedocs?
- android - 如何自定义 Android 10 (Samsung A10) Chrome Share 菜单(来自移动 Chrome0?
- sequelize.js - 使用多个关联记录创建 - Sequelize
- c# - 如何在 C# 中制作嵌套自定义 app.config
- javascript - 如何使函数在更新状态下工作?
- ios - swift - UISwitch isOn时如何在不同的视图中显示/隐藏标签?