2016-10-05 10 views
0

Der Tabellenname ist .Suchen nach MAX (Avg (Wert)) nach Gruppierung nach zwei Feldern

Country City  Rating Date 
------------------------------------ 
France Brest  95  24092016  
France Brest  98  27092016 
France Brest  95  03102016 
France Lille  100  26092016  
France Lille  92  28092016 
Japan  Tokyo  98  02102016 

Es gibt mehr als 50 verschiedene Länder und jedes Land hat wenige Städte. Und jede Stadt kann mehr als eine Reihe von Aufzeichnungen oder mehr haben. Ich möchte eine Stadt mit dem höchsten Durchschnitt Rating (Vergleichen Sie Städte in ihrem eigenen Land) auswählen und dann mit allen anderen Städten in verschiedenen Ländern vergleichen. So sollte die letzte Abfrage alle Land und ihre ONE City mit max (avg (Rating)) und in der Reihenfolge anzeigen. Die Beispielausgabe:

Country City  max(avg(rating)) 
------------------------------------- 
USA  New York 97.25 
UK  Cardiff  96.70 
Germany Greven  96.50 
Turkey Afyon  94.88 
France Guipavas 94.10 
Canada Cartwright 91.35    

kann ich nur den max (avg (Stern)) für ein Land. Brauche Hilfe.

(Bearbeitet) Das Ergebnis, das ich will, ist ähnlich wie Miss World Contest. Konkurrieren und gewinnen Sie zuerst gegen den lokalen Teilnehmer in Ihrem Land. Als nächstes (mein endgültiges Ergebnis) ist es, gegen die Gewinner aus anderen Ländern zu konkurrieren und sie mit ihrem Durchschnittswert (Rang) als Erster zu bewerten, dass sie in ihrem Land wesentlich besser geworden sind.

+0

Dies ist für 'Ms-access' oder' Mysql' –

+0

Ich bin nicht vertraut mit MS-Access-Syntax, damit ich nicht SQL zu schreiben versuchen, aber versuchen, Ihre Fragen Aufspaltung in zwei..Man findet heraus, welche Stadt die höchste Durchschnittsbewertung hat, während die andere der Liste der Städte mit den Ländern beitritt. Versuchen Sie diese Annäherung – leofontes

+0

ich benutze ms-Zugang – Yithirash

Antwort

1

Wenn nicht falsch sind Sie suchen für diesen

SELECT country, 
     city, 
     Avg(rating) AS Ratings 
FROM c_list A 
GROUP BY city, 
      country 
HAVING Avg(rating) = (SELECT TOP 1 Avg(rating) AS Ratings 
         FROM c_list B 
         WHERE a.country = b.country 
         GROUP BY city 
         ORDER BY ratings DESC) 
ORDER BY ratings DESC 

Hinweis: Wenn Sie Mysql das ersetzen TOP Schlüsselwort mit LIMIT

+0

sein nicht nur Frankreich. Ich möchte für alle Länder in ihrer Stadt mit der höchsten Bewertung antworten. – Yithirash

+0

@Yithirash - Entferne die Frankreich von 'Where' Klausel. Aktualisiert die Antwort jetzt überprüfen ' –

+0

danke. es funktioniert. Daumen hoch .. – Yithirash

0

Basistabelle verwenden:

Wählen Sie t. * aus temp_lax t LAND STADT RATING 1 Frankreich Brest 95 2 Frankreich 98 Brest 3 Frankreich Brest 95 4 Frankreich Lille 100 5 Frankreich Lille 92 6 Japan Tokyo 98

Abfrage:

wählen t1.country, t1. Stadt, Avg (t1.Rating) Bewertung von temp_lax t1 Gruppe von t1.country, t1.city mit avg (t1.rating) = (select max (avg (Stern)) von temp_lax t2 WHERE t1.country = t2.land GROUP BY t2.city) um nach Bewertung ab

OUTPUT: LAND STADT RATING 1 Japan Tokyo 98 2 Frankreich Lille 96 3 Frankreich Brest 96

Bitte lassen Sie mich wissen, wenn Sie für unterschiedliche Ergebnismenge suchen.

+0

nicht genau richtig. Ihr Resultset hat zwei Städte aus demselben Land (Frankreich). Aber was ich suche, ist eine Stadt pro Land. – Yithirash

Verwandte Themen