如何在Hive中按分组以外的列上应用max子句

时间:2019-09-27 03:32:57

标签: hive hiveql

我有一个包含以下数据的配置单元表。

Table
---------------------
c1     c2      c3
a      1       7
a      2       6
a      3       3
a      3       1
a      3       2

我想编写一个查询以从c3列获取值2。逻辑是,对于c1列,选择max(c2),然后在该max(c2)中找到max(c3)

我写了

这样的查询
select c1, max(c3) from table1 
group by c1
having c2=max(c2)

但是这不起作用,因为Hive所说,我只能在具有group by一部分的have子句中使用那些列。

请帮助我。

注意:-我需要一个查询。我可以在两个查询中写出相同的文字

2 个答案:

答案 0 :(得分:3)

with your_data as (
select stack (5,
'a',1,7,
'a',2,6,
'a',3,3,
'a',3,1,
'a',3,2) as (c1,c2,c3)
)

select c1, max(c3) as max_c3
from
(
select c1,c2,c3,
       rank() over(partition by c1 order by c2 desc) rn --max(c2) marked 1
  from your_data
)s where rn=1 --filter records with max(c2)
group by c1

结果:

c1  max_c3  
a   3   

答案 1 :(得分:0)

使用聚合函数:

create table val
(alpha varchar(10),id1  int,id2 int);

insert into val values ('a',3,3);
insert into val values ('a',3,1);
insert into val values ('a',3,2);

select alpha,id2 from
(
select alpha,max(id1) as id1,max(id2) as id2
from val group by alpha
)agg