Hive SQL - 标记,大小写
Hive SQL - Flag, Case when
我有一个名为 'test' 的 table,其中包含以下列:
我试图根据相同的 lead_id 如果 click = 1 和 impression = 1 进行标记,这可能会在多行中重复,因为每个事件(点击或印象)由于它们的原因而在单独的行中捕获不同的发生日期,然后将其标记为 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 ;
在lead_id
的每个分区中获取click
和imp
的最大值。如果它们等于 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;
我有一个名为 'test' 的 table,其中包含以下列:
我有查询:
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 ;
在lead_id
的每个分区中获取click
和imp
的最大值。如果它们等于 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;