【发布时间】:2018-09-16 07:20:03
【问题描述】:
我是我的公司,有 2 个表来承载活动信息和网店信息。
基本信息
在活动表中,它携带如下信息:
CAMPAIGN_NAME CREATION_DATE NUM_DELIVERED NUM_ERRORS
Promotion 101 2013-01-05 100,000 100
Promotion 105 2013-01-05 135,000 200
Promotion 104 2013-01-05 125,000 0
Promotion 103 2013-01-06 50,000 0
在网上商店中它带有这样的信息
VISIT_KEY VISIT_AT .....
100200 2013-01-05
105235 2013-01-05
103050 2013-01-05
期望的结果
我们想建立一个表格来显示每天的效果,比如
CREATION_DATE VISIT_AT NUM_DELIVERED NUM_VISITS
2013-01-05 2013-01-05 260,000 30,000
2013-01-06 2013-01-06 50,000 0
方法前后
为了收集信息,在我们使用union方法之前,首先在单独的表中进行聚合,然后将UNION ALL到另一个表中,
SELECT
campaign_date,
visit_date,
SUM(delivered),
SUM(visits)
FROM
((Select
CREATION_DATE::DATE as campaign_date,
'1970-01-01'::DATE as visit_date
SUM(NUM_DELIVERED) as delivered
0 AS visits
FROM
campaign
GROUP BY 1,2)
UNION ALL
(Select
'1970-01-01'::Date AS campaign_date,
VISIT_AT::DATE AS visit_date
0 AS delivered
COUNT(VISIT_KEY) AS visits
FROM
campaign
GROUP BY 1,2))
GROUP BY 1,2
看起来像这样
campaign_date visit_date delivered visits
2013-01-05 1970-01-01 260,000 0
1970-01-01 2013-01-05 0 30,000
2013-01-06 1970-01-01 50,000 0
现在我尝试与campaign.CREATION_DATE = webshop.VISIT_AT 上的左连接结合起来,如下所示:
Select
campaign.CREATION_DATE as campaign_date,
webshop.VISIT_AT as visits,
SUM(campaign.NUM_DELIVERED) as delivered,
COUNT(webshop.VISIT_KEY) AS visits
FROM
webshop LEFT JOIN campaign ON webshop.VISIT_AT = campaign.CREATION_DATE
但数字完全不同……
问题
1,此查询中可能出现的错误是什么?因为我想得到相同的信息,并且应该得到相同的结果......
2、我怎样才能达到预期的效果?
供您参考,我使用的是 Amazon redshift。
非常感谢您提前提供的帮助,祝您周末愉快!
【问题讨论】:
-
您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签
postgresql、oracle、sql-server、db2、... -
请edit您的查询并添加产生错误的查询。 Formatted text 请no screen shots。 (edit 您的问题 - 在 cmets 中不邮政编码或其他信息)
-
您是说每个广告系列运行一天,并且在任何一天都可以有一个且只有一个正在运行的广告系列?
标签: sql join union amazon-redshift