配置单元SQL-标志,大小写为
我有一个名为“test”的表,其中包含以下列: 我试图根据相同的lead_id(如果click=1,impression=1)进行标记,该id可以跨多行复制,因为每个事件(click或impression)由于发生日期不同而捕获在单独的行中,然后将其标记为1 我有:配置单元SQL-标志,大小写为,sql,hive,case,Sql,Hive,Case,我有一个名为“test”的表,其中包含以下列: 我试图根据相同的lead_id(如果click=1,impression=1)进行标记,该id可以跨多行复制,因为每个事件(click或impression)由于发生日期不同而捕获在单独的行中,然后将其标记为1 我有: select click, imp, lead_id, case when count(distinct lead_id) >1 and (click=1 and imp = 1) then 1
select click, imp, lead_id,
case
when count(distinct lead_id) >1 and (click=1 and imp = 1)
then 1
else 0
end as flag
from test
group by click, imp, lead_id;
所需输出:
因此,该标志仅标记lead_id abc001,因为它在不同日期具有点击和导入功能。使用如下分析功能:
select click, imp, lead_id,
case when sum(click) over (partition by lead_id) > 0
and sum(imp) over (partition by lead_id) > 0
then 1
else 0
end as flag
from test ;
在
潜在客户id
的每个分区中,获取单击
和导入
的最大值。如果它们等于1,则标记它们。这应该比在每个分区上求和稍微有效一些
select
*,
case when max(click) over (partition by lead_id) = 1 and
max(imp) over (partition by lead_id) = 1
then 1
else 0
end as flag
from test;
这很有效。谢谢你的建议。但无论哪种方式,它都返回相同的输出。我可以问一下,为什么用“max”而不是“sum”吗?max比sum快,原因很明显:)在我看来不太明显。你有一些关于Hive或其他证明的基准吗?证明留给读者作为练习。。。开玩笑的是,我可能混淆了count/max的性能-我读到count更快,但对max来说可能不是真的。。。