group-by和join-in-hive

sd2nnvve  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(434)

我怎样才能在Hive里做这样的事情:
表1:

ID  Name        Friends
1   Tom         5

表2:

ID  Name        DOB
1   Jerry       10/10/1999
1   Kate        Null
1   Peter       02/11/1983
1   Robert      Null
1   Mitchell    09/09/2000

我想做的是:
对于表1中的每个id,找到num of not null dob,然后除以friends
我写了一个查询:

SELECT t.ID, t.Friends, COUNT(s.DOB)/ t. Friends from Table1 t join Table2 s on (t.ID = s.ID) GROUP BY t.ID

当我这样做的时候,我得到了一个错误,因为friends不是组by key的一部分
我期待的答案是:3/5

zour9fqk

zour9fqk1#

只需按分区将好友添加到您的群中:

SELECT t.ID, t.FRIENDS, COUNT(s.DOB)/ t. FRIENDS 
 from Table1 t 
 join Table2 s      
 on (t.ID = s.ID) 
 GROUP BY t.ID. t.FRIENDS

我更喜欢这样写这种查询:

SELECT t.ID, case when t.FIREND>0 then Cnt / t.FRIENDS ELSE 0 END 
 FROM Table t1 
 JOIN (Select ID, Count(*) AS Cnt  from Table 1 GROUP BY Id)  t2
 ON t1.ID = t2.ID
7tofc5zh

7tofc5zh2#

如果您已经声明id,表1中的friends为整数,表2中的id为整数,那么下面的查询将得到您想要的输出

select a.name, concat(cast(b.cnt as string),'/',cast(a.friends as string)) 
from table1 a 
join 
    (select id, count(DOB) as cnt from table2 where DOB is not null group by id) b 
on (a.id = b.id)

相关问题