dav*_*jhp 3 sql data-warehouse
在线卖家的数据库模型:
为了创建数据仓库,我按http://bit.ly/1bOuOXQ展平表
注意事实表中的数据变得重复(买家在订单中购买了两件商品。)
为了获得所有收入的总和,我通常会这样编写sql:
从 OrderFact 中选择总和(OrderTotal)
sql 在原始 OLTP 表上可以正常工作,但现在我正在查询 OLAP 数据仓库,其中包含非规范化数据,现在该类型的 sql 将产生不正确的结果。
查询总收入应返回 $152.60。
如何修复sql以正确查询事实表?
如果您无法获得像总和或订单这样基本的东西,那么您的事实表设计很差。您所谓的“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)