2016-04-22 4 views
0

Hallo, also ich versuche, die Stadt mit playerid mit den meisten AB (läuft) auszugeben.Gruppe von in HIVE funktioniert nicht wie ich will

Geben Sie die Geburtsstadt des Spielers aus, der am meisten bei Fledermäusen (AB) in
seine Karriere hatte.

Jetzt bekomme ich, was ich will Cinncinati, Sander01, 14432, das ist richtig. Aber es zeigt sich in 3's so. Das gilt auch für jede Stadt und Spieler und läuft, wie der 2. am meisten. Ich brauche nur 1 Eintrag, die anderen 2 sind redundant. Ich denke da ist etwas, was ich mit der Gruppe falsch gemacht habe, irgendeine Hilfe? 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; 

Antwort

1

zu DISTINCT Siehe für deutliches Ergebnis zu erzielen set.Now auf Ihre Frage kommt, verbinden sich mit der obersten Zeile aus der Ergebnismenge b Master-Tabelle.

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  

Sie können LIMIT 30 zu LIMIT 1 ändern und erhalten das gleiche Ergebnis.

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; 

Hinweis: wenn mehrere Spieler mit den gleichen meisten Läufe sind dann LIMIT 1 nicht die richtige Antwort geben.

+1

danke noch einmal, aber hey schnellen Vorschlag. Sie müssen einen Alias ​​für sum (ab) in der Reihenfolge by-Klausel haben, sonst wird es udf SUM nicht unterstützt unterstützen. – dedpo

+1

@dedpo in der Gruppe von oder um? –

+1

Ordnung, mein Fehler – dedpo