2017-07-12 34 views
0

比方說,我有兩個表HiveQL:計數上述範圍內的值instancees內部陣列

T1:

id number 
A  1 
B  1 
C  4 
A  6 
A  9 

T2:

id 
A 
B 
C 

我現在要做的就是加入他們的行列,併產生TB1中每個ID都具有的所有號碼的列表。

SELECT T2.id, collect_list(T1.number) 
FROM T2 LEFT OUTER JOIN T1 on T1.id = T2.id 
GROUP BY T2.id 

所以現在我有這樣的:

結果:

id number 
A  [1, 6, 9] 
B  [1] 
C  [4] 

如果我想也是的次數每個ID輸出計數超標,比方說,5?我想從RESULT表中獲取另一個表。

所以:

結果2:

id number  count_above_5 
A  [1, 6, 9] 2 
B  [1]   0 
C  [4]   0 

我知道我可以爆炸的數組,然後產生一個新的表,其中數> 5和計數每ID的那些行的情況下,然後我可以加入上面的結果表與這一個,但有沒有更乾淨,更好的方式來做到這一點?如在,我可以應用一些功能的列與數組產生count_above_5?

+1

兩個'6'和'9'比'5'更大。 'count_above_5'應該等於'2' –

回答

1

簡單count

SELECT T2.id, collect_list(T1.number),count(case when T1.number > 5 then 1 end) as count_above_5 
FROM T2 LEFT OUTER JOIN T1 on T1.id = T2.id 
GROUP BY T2.id