2015-06-17 91 views
1

JOIN我怎樣才能做到在HIVE是這樣的:GROUP BY和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,找到不爲空的DOB的數目,然後除以朋友

我寫了一個查詢爲:

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 

當我這樣做,我得到的錯誤是朋友不是由主要

答案我期待該組的部分是:3/5

+0

您需要回答的問題是:哪些朋友,你打算在計算時使用多個相同的ID?所有?任何?平均?和? – Tim3880

+0

如果id是表1中的主鍵,則可以將朋友添加到組中。 – Tim3880

回答

0

朋友只需添加到您的GROUP BY部分:

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 
0

如果有聲明ID,朋友如表1表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)