我试图每个月都获得每个客户的 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
我之前曾要求提供一些最低限度的可重复数据。没有它,我只能给你一个执行计划,而不是确切的查询。祝你好运!让我知道它是否有效。