在HIVE中分组不能像我想的那样工作

时间:2016-04-22 02:10:23

标签: sql hadoop hive

嗨所以我试图用最多AB(跑步)的球员输出城市。

输出蝙蝠(AB)中玩家最多的出生城市 他的职业生涯。

现在我得到了我想要的Cinncinati,sander01,14432,这是正确的。但它出现在3个像这样的东西。对于每个城市和球员而言,这也是第二位的。我只需要1个条目,另外2个是冗余的。我觉得有什么我做错了小组,有什么帮助吗? PLZ

Cinncinati, sander01, 14432
Cinncinati, sander01, 14432
Cinncinati, sander01, 14432
Chicago, dere90, 12324
Chicago, dere90, 12324
Chicago, dere90, 12324



SELECT a.bcity,a.id, b.ab FROM master a 
JOIN
(SELECT id, SUM(ab) as ab FROM batting
GROUP by id) b
ON a.id = b.id
ORDER by b.ab DESC
limit 30;

1 个答案:

答案 0 :(得分:1)

有关获取不同结果集的信息,请参阅DISTINCT。现在回答您的问题,使用结果集b中的顶行连接主表。

select a.bcity,b.id,b.ab from master a 
join 
(select id,sum(ab) as ab from batting
 group by id
 order by ab desc
 limit 1
) b
on a.id = b.id    

您可以将LIMIT 30更改为LIMIT 1并获得相同的结果。

SELECT a.bcity,a.id, b.ab FROM master a 
JOIN
(SELECT id, SUM(ab) as ab FROM batting
 GROUP by id
) b
ON a.id = b.id
ORDER by b.ab DESC
 limit 1;

注意:如果有多个玩家的跑步次数相同,那么LIMIT 1将无法给出正确答案。