2016-05-06 15 views
1

Ich bin ziemlich neu in HQL und immer noch versuchen, meinen Weg durch die Syntax. Ich habe eine Tabelle mit SpielerID und Spielgewinnungszielen (GWG). Ich möchte die Player-IDs anzeigen, die den maximalen GWG-Wert haben. Dies ist meine Abfrage:Wert von Tabelle auf Maximum (Spalte) in HQL auswählen

select playerid as ID from scoring where gwg = ('select max(scoring.gwg) from scoring'); 

Ich bekomme keine Ausgabe, obwohl Hive einen Namen der Spalte druckt. Aber wenn ich 'gwg = 16' festcode, bekomme ich die Ausgabe, die ich brauche. Irgendein Rat? Ich arbeite an Hortonworks 2.3.2.

+0

Ihre Unterabfrage sollte nicht in Anführungszeichen stehen. Es ist eine Anweisung, kein Zeichenfolgenwert. – carbontax

Antwort

2

können Sie diese versuchen

select playerid, max(scoring.gwg) from scoring group by playerid; 

Hier ist eine weitere

select playerid, max(scoring.gwg) as maxScore from scoring 
    group by playerid order by maxScore desc; 

Die oben wird die der Spieler-IDs in der absteigenden Reihenfolge das heißt einen mit max Punktzahl wird auf der Oberseite geben.

+1

Vielen Dank! Aber jetzt habe ich Probleme beim Laden der ambari-Login-Seite, so dass ich es jetzt ausprobieren kann. Sobald ich das sortiert habe, werde ich es definitiv ausprobieren! – user2330778

+0

@ user2330778: keine Probleme ... lassen Sie mich wissen, wenn Sie weitere Hilfe auf dem gleichen .. –

+0

Hallo Abhijit, obwohl die Abfrage funktioniert, gibt es immer noch nicht die maximalen Werte. Ich habe die Abfrage mit und ohne max. Ich bekomme immer noch die gleiche Anzahl von Einträgen. Ich muss die maximale Punktzahl für das Jahr auswählen, unabhängig von sich wiederholenden Spielern. – user2330778

2

Es gibt mehrere Möglichkeiten, dies zu tun. Holen Sie sich den max von Zählungen und Filtern der playerid mit dem max gwg

select playerid 
from scoring 
group by playerid 
having count(*) = (select max(c) from 
       (
        select playerid,count(*) c 
        from scoring 
        group by playerid 
       ) a 
      ) 

Oder Holen Sie sich die Grafen und es um nach absteigender Reihenfolge und erhält die obere Reihe

select playerid, count(*) as cnt 
from scoring 
group by playerid 
order by cnt desc 
limit 1; 
+0

Vielen Dank. Ich konnte das nicht versuchen, da meine ambare-Anmeldeseite nicht geladen wird. Ich werde es versuchen, sobald ich es behoben habe! – user2330778

0

denke ich, alles, was Sie brauchen, ist dies einfache Abfrage

select playerid,max(scoring.gwg) as max from scoring group by playerid order by max desc 

Hive unterstützt keine Unterabfragen.