维度表、桥表和事实表连接
Posted
技术标签:
【中文标题】维度表、桥表和事实表连接【英文标题】:Dimension table, bridge table and fact table join 【发布时间】:2020-08-20 00:11:31 【问题描述】:我总共有四张桌子: 维度表 - 书籍和作者 桥表书/作者 交易事实
由于书籍有多个作者,一个作者有多个书籍,因此使用桥接表来解决多对多关系
表结构如下:
Dim_Books:
book_id (PK)
ISBN
Title
作者:
Author_id (PK)
FName
LName
Book_auth_bridge:
book_auth_id (PK)
book_id
auth_id
Fact_Sales:
Sale_amount
quantity
Book_id
book_auth_id
我正在尝试从事实表中检索作者的总销售额,因为我正在加入桥接表,所以我总是从内部连接中获得多行并且数量是重复的。
如何编写 SQL 来获取作者的总销售额?
【问题讨论】:
(1) 请告诉我们您当前的查询 (2) 为什么fact_sales
中有book_auth_id
?
请发布您的查询。如果你有一本售价 99 美元的书,其中有三位作者,我猜你希望每个作者都能拿到 33 美元?
(1) 当前查询:select sum(f.sale_amount),a.author_id from fact_sales f ,book_auth_bridge br ,dim_author a where a.author_id = br.author_id and br.book_auth_id = f.book_auth_id group by a.author_id (2) 现有报告的事实表结构需要相同。添加桥接表列不会影响现有报表
尼克的答案是肯定的,我需要为每个作者分配
【参考方案1】:
最灵活的解决方案是在您的桥接表中包含一个“分配因子”列,并将其与您的度量相乘以获得所需的比例。
例如,如果您想在 3 个人之间平均分配,那么您在所有 3 条桥接表记录中的系数为 0.333。但是,如果您想将 50% 分配给主要作者,并将剩余部分与其他作者平分,则因子为 0.5、0.25 和 0.25
【讨论】:
以上是关于维度表、桥表和事实表连接的主要内容,如果未能解决你的问题,请参考以下文章