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

时间:2014-02-02 04:16:57

标签: sql data-warehouse

在线卖家的数据库模型:

enter image description here

要创建数据仓库,我按http://bit.ly/1bOuOXQ

展平表格

enter image description here

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

enter image description here

为了得到所有收入的总和,我通常会写这样的SQL:

  

从OrderFact

中选择sum(OrderTotal)

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

总收入查询应返回$ 152.60。

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

1 个答案:

答案 0 :(得分:4)

如果您无法获得与总和或订单一样基本的东西,那么您的事实表设计很差。你所谓的" 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