如何编写SQL来查询数据仓库事实表

dav*_*jhp 3 sql data-warehouse

在线卖家的数据库模型:

在此输入图像描述

为了创建数据仓库,我按http://bit.ly/1bOuOXQ展平表

在此输入图像描述

注意事实表中的数据变得重复(买家在订单中购买了两件商品。)

在此输入图像描述

为了获得所有收入的总和,我通常会这样编写sql:

从 OrderFact 中选择总和(OrderTotal)

sql 在原始 OLTP 表上可以正常工作,但现在我正在查询 OLAP 数据仓库,其中包含非规范化数据,现在该类型的 sql 将产生不正确的结果。

查询总收入应返回 $152.60。

如何修复sql以正确查询事实表?

Gor*_*off 6

如果您无法获得像总和或订单这样基本的东西,那么您的事实表设计很差。您所谓的“OrderFact”实际上是“LineItemFact”。如果它是“订单事实”,则给定订单将仅位于一行。

如果将其设计为 LineItemFact,则税费将位于单独的行上,您可以执行以下操作:

select sum(LineItemTotal)
from OrderFact
Run Code Online (Sandbox Code Playgroud)

如果没有,您可以使用“LineItemNumber 来枚举每个订单的行。然后您可以执行以下操作:

select sum(OrderTotal)
from OrderFact
where LineItemNumber = 1;
Run Code Online (Sandbox Code Playgroud)

根据您的结构,您可以执行以下操作:

select sum(OrderTotal)
from (select OrderId, max(OrderTotal) as OrderTotal
      from OrderFact
      group by OrderId
     ) o
Run Code Online (Sandbox Code Playgroud)