【发布时间】:2020-03-03 11:43:32
【问题描述】:
我确信有一个简单的解决方案,我的豌豆大脑现在无法理解。
我正在使用带有 FULL OUTER JOIN 的以下查询,我想计算 DISTINCT memberid:
SELECT a.year,
COUNT(DISTINCT a.memberid) AS members
FROM (SELECT DISTINCT YEAR,
memberid
FROM (SELECT EXTRACT(YEAR FROM created_at) AS YEAR,
EXTRACT(MONTH FROM created_at) AS MONTH,
member_id AS memberid,
COUNT(DISTINCT field1) AS field1
FROM table1
GROUP BY YEAR,
MONTH,
member_id
ORDER BY YEAR,
MONTH,
eids DESC)) a
FULL OUTER JOIN (SELECT DISTINCT YEAR,
memberid
FROM (SELECT EXTRACT(YEAR FROM created) AS YEAR,
EXTRACT(MONTH FROM created) AS MONTH,
memberid,
COUNT(field2) AS field2
FROM table2
GROUP BY YEAR,
MONTH,
memberid
ORDER BY YEAR,
MONTH,
questions DESC)) b
ON a.year = b.year
AND a.memberid = b.memberid
GROUP BY a.year
ORDER BY a.year
这个查询可以正常执行,但我很确定结果不是我所期望的。
我得到以下结果:
2014 26834
2015 58573
2016 178378
2017 233291
2018 297404
2019 281088
我们现在将FULL OUTER JOIN 两侧的查询称为Left query 和Right query。当我在 year 上聚合 Right query 并计算不同的 memberid 时,我得到以下结果:
2013 3915
2014 59025
2015 115514
2016 176528
2017 216675
2018 301007
2019 311141
正如我们所见,Right query 本身的结果 (DISTINCT COUNT) 高于具有 FULL OUTER JOIN 的完整查询。这显然没有意义。
在我的最终结果中,我想在所有memberid 上运行COUNT DISTINCT(即出现在Left query 中的memberid,加上出现在Right query 中的memberid,没有计算任何memberid 两次)并将其聚合为year。
我知道解决这个问题的方法必须很简单。任何帮助将不胜感激。
【问题讨论】:
标签: sql postgresql amazon-redshift