在蜂巢中分组后分组

时间:2017-10-05 07:58:22

标签: sql hive

假设有一个包含一些数据的表和一个包含日期的列:

column1, column2, date
a, a, 2016
a, b, 2016
a, c, 2017
b, d, 2017
b, e, 2017

案例是为每个column1计算column2的出现次数,并为每个column1应用最小日期。

第一部分是一个简单的小组。第二个可以通过partition by子句获得。但是,我怎样才能以聪明而干净的方式将这两者结合起来呢? 是否需要分区才能获得最小日期?任何明智的建议都会很棒!

预期产出:

column1, count, min_date
a, 3, 2016
b, 2, 2017

1 个答案:

答案 0 :(得分:0)

简单group by

select column1, 
       count(distinct column2) count, --remove distinct if you need count not null column2 by column1
                                      --use count(*) if you need count all rows by column1
       min(date)               min_date
from table
group by column1

让我们测试一下:

select column1, 
       count(distinct column2) count, --remove distinct if you need count not null column2 by column1
                                      --use count(*) if you need count all rows by column1
       min(date)               min_date
from (
select 
stack(6,
'a','a', 2016, 
'a','b', 2016, 
'a','c', 2017, 
'b','d', 2017, 
'b','e', 2017, 
'c','e', 2015) as( column1, column2, date)
) s
group by column1

结果:

a   3   2016    
b   2   2017    
c   1   2015    

请注意,min_date为每个column1值选择了最小值。