【问题标题】:How to write SQL to query a data warehouse fact table如何编写 SQL 查询数据仓库事实表
【发布时间】:2014-02-02 04:16:56
【问题描述】:

在线卖家的数据库模型:

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

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

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

从 OrderFact 中选择 sum(OrderTotal)

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

总收入查询应返回 $152.60。

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

【问题讨论】:

    标签: sql data-warehouse


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多