如何在HIVE中为存在航空出行记录的用户生成Flyer标识
HIVE生成Flyer标识列的解决方案
针对你的需求,这里提供两种实用的HIVE SQL写法,不用在CASE WHEN里嵌套子查询,也不用写大量IN子句:
方法一:使用窗口函数(推荐,更高效)
利用MAX()窗口函数按用户分组,直接判断每组是否存在air mode=1的记录:
SELECT Names, `air mode`, CASE WHEN MAX(`air mode`) OVER (PARTITION BY Names) = 1 THEN 1 ELSE 0 END AS Flyer FROM your_table_name;
逻辑:按Names分组后,取每组air mode的最大值。如果最大值是1,说明该用户至少有一条air mode=1的记录,标记Flyer=1;否则标记0。
方法二:分组子查询关联
先筛选出所有存在air mode=1的用户,再和原表关联匹配:
SELECT t.Names, t.`air mode`, CASE WHEN s.has_air_mode_1 IS NOT NULL THEN 1 ELSE 0 END AS Flyer FROM your_table_name t LEFT JOIN ( SELECT Names, 1 AS has_air_mode_1 FROM your_table_name WHERE `air mode` = 1 GROUP BY Names ) s ON t.Names = s.Names;
逻辑:子查询先找出所有有air mode=1记录的用户并标记,原表左联这个结果,匹配到的用户说明符合条件,标记Flyer=1,否则0。
内容的提问来源于stack exchange,提问作者sp22
相关产品推荐
相关产品推荐

