sql - SQL JOIN 和 SUM 函数导致巨大的数量差异

我试图每个月都获得每个客户的 sum 。然而,每当我join tables 与日历table 时,我得到一个非常高的数字。销售的顺序是一样的..所以我认为 sum 功能被多次使用..

有谁知道如何解决这一问题..?

[此代码导致较小的数字]

SELECT 
s.payer_account_id
, s.month_id
, SUM(s.sales_revenue) AS total_sales
FROM dev.assessment.fact_sales_revenue s
GROUP BY 
s.payer_account_id
, s.month_id
ORDER BY total_sales;

结果是:

Payeraccountid month_id total_sales

1 201903 -248182

2 201907 -196241

3 202008 -172717

4 201908 -160415

[升序的结果是一样的,但是这段代码导致了巨大的数字]

SELECT 
    s.payer_account_id
    , s.month_id
    , SUM(s.sales_revenue) AS total_sales
    , c.month_code
    , c.year_id
    , c.prior_year_id
    FROM dev.assessment.fact_sales_revenue s
INNER JOIN dev.assessment.dim_calendar c
ON s.month_id = c.month_id
GROUP BY 
    s.payer_account_id
    , s.month_id
    , c.month_code
    , c.year_id
    , c.prior_year_id
ORDER BY total_sales;

结果是:Payeraccountid |month_id |总销售额 |月代码

1 | 201903 | -7693657 |三月

2 | 201907 | -5887230 |七月

3 | 202008 | -5181517 |八月

4 | 201908 | -4972869 |八月

回答1

是的,你是对的。您的数据在每一行中几乎乘以 30 倍。为什么不使用 dev.assessment.dim_calendar c join 获得主要结果。就像是:

SELECT a.*, c.<your_necessary_columns> FROM (
SELECT 
    s.payer_account_id
    , s.month_id
    , SUM(s.sales_revenue) AS total_sales
    FROM dev.assessment.fact_sales_revenue s
    YOUR CLAUSES) a 
    INNER JOIN dev.assessment.dim_calendar c
    ON a.month_id = c.month_id
    YOUR CLAUSES

我之前曾要求提供一些最低限度的可重复数据。没有它,我只能给你一个执行计划,而不是确切的查询。祝你好运!让我知道它是否有效。

相似文章

随机推荐

最新文章