我们说我有两张桌子
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
我知道我可以爆炸数组,然后生成一个新表WHERE数字> 5并计算每个ID的那些行的实例然后我可以将上面的结果表加入这个,但是有更清洁,更好的方式去做这个?在中,我可以在列上使用一些函数来生成count_above_5吗?
答案 0 :(得分: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