Postgres 查询正确连接多个表

问题描述 投票:0回答:1

我想连接两个表以获得如表4所示的输出。详情如下:

表1:销售数据

日期 平台ID 已售单位 收入 频道ID
2024-07-01 ABCD1 12 1200 1
2024-07-02 ABCD1 11 1000 1
2024-07-01 ABCD2 4 1200 2
2024-07-03 ABCD3 42 9000 3
2024-07-03 ABCD3 10 1000 2

表2:广告数据

日期 平台代码 广告支出
2024-07-01 1A 1000
2024-07-02 1A 1500
2024-07-01 2B 4000
2024-07-03 3C 4200

表3:平台映射

平台ID 平台代码
ABCD1 1A
ABCD2 2B
ABCD3 3C

所需输出(表4)

日期 平台ID 已售单位 收入 频道ID 广告支出
2024-07-01 ABCD1 12 1200 1 1000
2024-07-02 ABCD1 11 1000 1 1500
2024-07-01 ABCD2 4 1200 2 4000
2024-07-03 ABCD3 32 9000 3 3200
2024-07-03 ABCD3 10 1000 2 1000

这里,

AdSpend
是基于
PlatformId
Date
与表3和表2中的
PlatformCode
连接起来的。

我尝试使用 CTE 编写以下查询,但它们没有按预期工作:

WITH AdSpendMapped AS (
    SELECT
        t1.date,
        t1.platformid,
        t1.UnitsSold,
        t2.AdSpend
    FROM SalesData t1
    JOIN PlatformMapping t3 ON t1.platformid = t3.PlatformId
    JOIN AdsData t2 ON t2.PlatformCode = t3.Platformcode AND t2.date = t1.date
),
TotalUnits AS (
    SELECT
        date,
        platformid,
        SUM(UnitsSold) AS TotalUnits
    FROM SalesData
    GROUP BY date, platformid
)
SELECT
    a.date,
    a.platformid,
    a.UnitsSold,
    a.Revenue,
    a.ChannelId,
    a.AdSpend
FROM AdSpendMapped a
JOIN TotalUnits t
    ON a.date = t.date AND a.platformid = t.platformid;
sql postgresql join
1个回答
0
投票

我尝试使用 CTE 编写以下查询,但它们没有按预期工作

您的查询存在语法错误,因此“不起作用”显然意味着您在运行查询时收到错误消息。您应该告诉我们并向我们展示该消息。

在 CTE AdSpendMapped 中,您正确加入了表,但由于某种原因,您忘记选择 Revenue 和 ChannelId。稍后您尝试访问这些列,但它们不存在于您的 CTE AdSpendMapped 中。

出于我不明白的原因,您有另一个名为 TotalUnits 的 CTE,您可以在其中聚合 SalesData,每个日期和平台 ID 获取一行,但根据您的示例数据,该表无论如何每个日期和平台 ID 一行,因此整个聚合毫无意义。更重要的是,当您选择在查询中不使用的 TotalUnits 时,根据所需的输出表显然不需要它。

因此,所需的整个查询是带有两个添加列的 AdSpendMapped CTE:

SELECT
  sd.date,
  sd.platformid,
  sd.UnitsSold,
  sd.Revenue,
  sd.ChannelId,
  ad.AdSpend
FROM SalesData sd
JOIN PlatformMapping pm ON pm.platformid = sd.PlatformId
JOIN AdsData ad ON ad.PlatformCode = pm.Platformcode AND ad.date = sd.date
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.