2016-04-06 8 views
1

Ich habe ein Bienenstock Tisch „Fluggesellschaft“ wie folgt aus: in welchem ​​Land wissen, haben die höchste Anzahl von FluggesellschaftenWie finde ich den Maximalwert und seinen Referenznamen aus der Hive-Tabelle?

name  airline 
USA  American Airline 
Nepal Jet Airline 
Dubai Emirates 
USA  SouthWestern 
USA  Quatar 
USA  Delta 

Nun, ich wollte. Ich verwende verschachtelte Unterabfragen.

select max(tot) 
from 
(select name as countryName, count(airline) as tot 
from airline 
group by name) a 

Dies gibt die maximale Anzahl der Fluggesellschaft, die in diesem Fall 4.

4 

Aber ich brauche auch den Namen des Landes. So ist die gewünschte Ausgabe:

USA 4 

Wie können wir es mit Unterabfragen tun? Ich habe es getan, ohne Unterabfragen zu verwenden. Ich muss mit Unterabfragen ausführen. Kann mir jemand helfen?

Antwort

2

können Sie row_number() verwenden:

select a.* 
from (select name as countryName, count(airline) as tot, 
      row_number() over (order by count(airline) desc) as seqnum 
     from airline 
     group by name 
    ) a 
where seqnum = 1; 

Im Fall von Verbindungen, das gibt ein beliebiges Land. Wenn Sie alle möchten, ändern Sie einfach row_number() zu rank().

+0

Können wir eine andere Unterabfrage verwenden, um den Maximalwert und den Namen ohne Bestellung zu ermitteln? – bthapa

+0

Ich verstehe Ihren Kommentar nicht. Aber wenn du eine andere Frage hast, solltest du sie eher als Frage denn als Kommentar stellen. –

+0

Ich meine, dass wir den maximalen Wert und Namen nicht finden können, ohne die Funktionen order und desc zu verwenden. Ich denke daran, nur verschachtelte Abfragen zu lösen. Ist das möglich? – bthapa

0

Sie könnten somthing wie thes tun:

select name, max(tot) 
from 
(select name as countryName, count(airline) as tot 
from airline 
group by name) a 
+0

Dieser Ausdruck wird Fehler wie geben: SemanticException [Error 10025]: Zeile 1: 7 Ausdruck nicht in GROUP BY Schlüssel 'Name' – bthapa

0

Es besteht keine Notwendigkeit für die Verschachtelung ist.

select country, count(*) as tot 
     from airline 
     group by country 
order by tot desc 
limit 1 
+0

Ich habe diesen Weg, aber ich brauche auch Unterabfrage verwenden. Wie kann ich das mit Unterabfrage tun? – bthapa

0

seine sehr einfach versuchen einfach das unten stehende Formular max-Wert zu erhalten: SELECT MAX (column_name) FROM table_name;

+0

Ich brauche auch den Namen nicht nur Max-Wert. – bthapa

+0

SELECT column_name FROM tabelle ORDER BY column_name ASC oder DESC wie Sie möchten versuchen Sie es ist seine Arbeit –

Verwandte Themen