Jestem dość nowy w HQL i wciąż próbuję wymyślićmoja droga przez składnię. Mam tabelę „zdobywającą punkty” z playerID i Game Winning Goals (GWG). Chcę wyświetlić identyfikatory graczy, którzy mają maksymalną GWG. To jest moje zapytanie:
select playerid as ID from scoring where gwg = ("select max(scoring.gwg) from scoring");
Nie otrzymuję danych wyjściowych, chociaż Hive wypisuje nazwę kolumny. Ale kiedy na stałe wpisuję „gwg = 16”, otrzymuję dane wyjściowe, których potrzebuję. Jakakolwiek rada? Pracuję nad Hortonworks 2.3.2.
Odpowiedzi:
2 dla odpowiedzi № 1Możesz spróbować tego
select playerid, max(scoring.gwg) from scoring group by playerid;
Oto kolejny
select playerid, max(scoring.gwg) as maxScore from scoring
group by playerid order by maxScore desc;
Powyższe da identyfikator gracza w malejącej kolejności, tzn. Ten z maksymalną liczbą punktów będzie na górze.
2 dla odpowiedzi nr 2
Można to zrobić na kilka sposobów. Uzyskaj maksimum zliczeń i przefiltruj playerid z maksymalnym gwg
select playerid
from scoring
group by playerid
having count(*) = ( select max(c) from
(
select playerid,count(*) c
from scoring
group by playerid
) a
)
Lub Zdobądź liczby i uporządkuj je malejąco, uzyskując najwyższy rząd
select playerid, count(*) as cnt
from scoring
group by playerid
order by cnt desc
limit 1;
0 dla odpowiedzi № 3
Myślę, że wszystko, czego potrzebujesz, to proste zapytanie
select playerid,max(scoring.gwg) as max from scoring group by playerid order by max desc
Hive nie obsługuje pod-zapytań.