我正在研究使用完全联接的两个不同select语句中的用户id的重叠和不重叠(唯一值)。主要区别在于一个表的deal\u id=0,而另一个表的deal\u id大于或等于1。我加入了exchange\u id、pub\u id和user\u id上的select语句,但没有加入deal\u id上的select语句。下面是我的查询:
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
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
其中,基于exchange\u id和pub\u id,具有空交易id的结果与具有非空交易id的结果匹配。
我能做什么?
编辑:为了澄清-我输入的查询是对原始查询的简化,它需要两个单独的select语句,因为我正在与另一个events表进行联合。我没有在这里显示它,因为它与完全连接问题上的聚合无关。另外,增量值试图计算存在于deal\u id>=1中而不存在于deal\u id=0中的用户(完全联接的另一个原因)。
1条答案
按热度按时间kiayqfof1#
你的问题似乎太复杂了。您可以对查询使用条件聚合:
我唯一不确定的专栏是
deal_id
. 但这似乎是你想要的逻辑。