可以'案例 - 何时'返回多个结果?

时间:2017-05-27 08:47:19

标签: sql hive

假设有一个表dim_user_info,其中包含非重复user_id及其id_number。 现在我想对它们进行分类:

select
a.user_id,
(case when user_id in (1,3,5,7) then 'class1'
when id_number in (128,329,349) then 'vip'
end) as category
from dim_user_info a

如果一条用户信息同时满足两个条件,我想获得完整信息,如下表中的user c

user_id  id_number   category
1          111        class1
2          128         vip
3          329        class1
3          329         vip
6          128         vip
7           55        class1

这可以在蜂巢中使用吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

您可以尝试使用UNION查询:

select
    user_id,
    'class1' as category
from dim_user_info
where user_id in (1,3,5,7)
union all
select
    user_id,
    'vip'
from dim_user_info
where id_number in (128,329,349)

我不知道这是否是Hive SQL中性能最高的解决方案,但它是一种让同一记录多次出现的方法,每种可能的匹配类别都会出现一次。

如果您还想包含非匹配用户,可以使用另一个联盟。

答案 1 :(得分:0)

如果并非所有用户都被分类,您可以使用带有

列的分类表

USER_ID, 身份证号码, 类

和查询

select
a.user_id, c.category
from dim_user_info a
left outer join  classification c 
on (a.user_id = c.user_id or a.id_number = c.id_number)

答案 2 :(得分:0)

select  ui.usr
       ,e.col

from    dim_user_info ui
        lateral view explode(array(
             case when user_id   in (1,3,5,7)     then 'class1' end
            ,case when id_number in (128,329,349) then 'vip'    end
            )) e

where   e.col is not null