为hiveql中的每个数据值范围显示一定数量的数据

twh00eeo  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(293)

我是这里的新手,也是hiveql的新手。我想问一下如何在hiveql中为每个数据值范围显示一定数量的数据?例如,我有一组数据:

Name    Age
A       34
B       38
C       39
D       35
E       26
F       34
G       34
H       26
I       27
J       27
K       30
L       31
M       42
N       39
O       37
P       22
Q       19
R       20
S       40

我只想显示16-25岁,26-35岁,36-45岁年龄组的三个人(显示他们的名字+年龄)。如果你不介意的话,请你简单地解释一下分区,因为我对这一部分没有很好的理解。
非常感谢!

czq61nw1

czq61nw11#

你可以试试这样的。

select name,age from 
(select name,age,row_number() over (partition by age_group order by name desc)  as rn
from (select name,age ,case when age between 16 and 25 then 20 when age between 26 and 35 then 30 when age between 36 and 45 then 40 else 0 end as "age_group" from table) t1 where age_group != 0) t2
where rn <=3
group by name,age

我把年龄分为16-25岁变成20岁,26-35岁变成30岁等等。所使用的分区按年龄分组,并按不同的行号给每个分组。在这种情况下,如果20多岁年龄组有4条记录,那么使用partition by子句,它将给出1,2,3,4行数;如果30多岁年龄组有3条记录,它将给出1,2,3行数。最后对每组有3行以上的行进行过滤。

相关问题