我正在使用完全连接查看来自两个不同选择语句的用户 ID 的重叠和非重叠(唯一值)。主要区别在于一个表的 deal_id = 0,而另一个表的 deal_id 大于或等于 1。我加入了关于 exchange_id、pub_id 和 user_id 的 select 语句,但没有加入 deal_id。
字段增量值试图计算存在于池中的用户 deal_id >= 1 并且不存在于池中的 deal_id = 0(完全加入的主要原因)。
这是我输入的查询的简化,它在两个选择语句中:
SET
hive.auto.convert.join = TRUE
;
SELECT
First.deal_id
,COALESCE( First.exchange_id, Second.exchange_id ) as exchange_id
,COALESCE( First.pub_id, Second.pub_id ) as pub_id
,COUNT (DISTINCT(case when Second.user_id is null then First.user_id else null END)) AS Incremental
,SUM (First.imps) AS First_imps
,SUM (Second.imps) AS Second_imps
FROM
(
SELECT
a.deal_id
,a.exchange_id
,a.pub_id
,a.user_id
,1 AS imps
FROM
logs a
WHERE
a.deal_id >= 1
AND a.event_type = 'TRUE'
) First
FULL JOIN (
SELECT
a.exchange_id
,a.pub_id
,a.user_id
,1 AS imps
FROM
logs a
WHERE
a.deal_id = 0
AND a.event_type = 'TRUE'
) Second
ON (
First.exchange_id = Second.exchange_id
AND First.pub_id = Second.pub_id
AND First.user_id = Second.user_id
)
GROUP BY
First.deal_id
,COALESCE( First.exchange_id, Second.exchange_id )
,COALESCE( First.pub_id, Second.pub_id )
;
这是我看到的结果:
DEAL_ID EXCHANGE_ID PUB_ID INCREMENTAL FIRST_IMPS SECOND_IMPS
/N 4 1780 0 0 15
/N 4 1560 0 0 32
3389 4 1780 2 7 6
1534 4 1560 4 9 8
这是我想看到的:
DEAL_ID EXCHANGE_ID PUB_ID INCREMENTAL FIRST_IMPS SECOND_IMPS
3389 4 1780 2 7 21
1534 4 1560 4 9 40
交易 ID 为空的结果与基于 exchange_id 和 pub_id 的非空交易 ID 的结果相匹配。
我能做些什么?
与此问题类似,但此解决方案不适用于此问题。
注意:我已经在 stackoverflow 上发布了这个问题,但我想我可以试试 dba
编辑:这是一个复制问题的 sqlfiddle,注意它使用的是 PostgreSQL,而我使用的是 hql