如何编写 SQL 查询数据仓库事实表
Posted
技术标签:
【中文标题】如何编写 SQL 查询数据仓库事实表【英文标题】:How to write SQL to query a data warehouse fact table 【发布时间】:2014-02-02 04:16:56 【问题描述】:在线卖家的数据库模型:
为了创建数据仓库,我按照http://bit.ly/1bOuOXQ 对表进行了展平
事实表中的注释数据变得重复(买家在他们的订单中购买了两件商品。)
为了得到所有收入的总和,我通常会这样写sql:
从 OrderFact 中选择 sum(OrderTotal)
该 sql 可以在原始 OLTP 表上正常工作,但现在我正在查询一个具有非规范化数据的 OLAP 数据仓库,现在这种类型的 sql 将产生不正确的结果。
总收入查询应返回 $152.60。
如何修复 sql 以正确查询事实表?
【问题讨论】:
【参考方案1】:如果你不能得到像总和或订单这样基本的东西,那么你的事实表设计就很糟糕。您所谓的“OrderFact”实际上是“LineItemFact”。如果它是“订单事实”,那么给定的订单只会在一行上。
如果这被设计为 LineItemFact,那么税收将在单独的行中,您可以这样做:
select sum(LineItemTotal)
from OrderFact
如果没有这个,你可以有一个“LineItemNumber 来枚举每个订单的行。然后你可以这样做:
select sum(OrderTotal)
from OrderFact
where LineItemNumber = 1;
使用您的结构,您可以:
select sum(OrderTotal)
from (select OrderId, max(OrderTotal) as OrderTotal
from OrderFact
group by OrderId
) o
【讨论】:
以上是关于如何编写 SQL 查询数据仓库事实表的主要内容,如果未能解决你的问题,请参考以下文章
数据仓库 - 如何使用 R 和/或 SQL 创建一个与所有维度相交的事实表