配置单元SQL-标志,大小写为

配置单元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

我有一个名为“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 
    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来说可能不是真的。。。