【问题标题】:Dice query only returning with a specific fields condition骰子查询仅返回特定字段条件
【发布时间】:2021-02-02 16:49:53
【问题描述】:

我们正在执行一个 dice olap 查询,以获取某个制作公司在特定年份的总收入,其架构如下:

使用这个查询:

SELECT PC.name, RC.year, SUM(revenue) as total_revenue
FROM movies_reception_facts MR
JOIN ref_calendar RC ON MR.release_date_key = RC.date_key
JOIN pc_groups PG ON MR.pc_group_key = PG.pc_group_key
JOIN movies_pc MP ON PG.pc_group_key = MP.pc_group_key
JOIN production_companies PC ON MP.pc_id = PC.pc_id
WHERE PC.pc_id IN(
    SELECT pc_id
    FROM production_companies
    WHERE name = 'Disney') AND 
    RC.date_key IN(
        SELECT RC.date_key
        FROM ref_calendar
        WHERE RC.year = 2014
        )
GROUP BY (PC.name, RC.year)

问题在于,它仅在年份设置为 2014 年时返回结果:WHERE RC.year = 2014。任何其他值都将返回一个空行。

【问题讨论】:

    标签: sql database psql olap


    【解决方案1】:

    我不确定这是否能解决您的问题,但该子查询有问题。首先,如果你确实使用了子查询,它会是:

    RC.date_key IN(
        SELECT RC2.date_key
        FROM ref_calendar RC2
        WHERE RC2.year = 2014
        )
    

    但是子查询不是必需的。您可以将逻辑替换为:

    RC.year = 2014
    

    然后将这个条件放在IN 子句中是愚蠢的。它应该是外部where 中的过滤器。而且由于表格已经加入,我想你只是想要:

    WHERE pc.name = 'Disney' AND 
          RC.year = 2014
    

    也就是说,我不确定这是否能解决您在其他年份没有返回数据的问题。

    【讨论】:

    • 感谢您的输入,但原来的问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多