Wählen Sie eine bestimmte Spalte zusammen mit einigen anderen Spalten in MySQL aus
Ich kann nicht scheinen zu finden, eine geeignete Lösung für Folgendes (wahrscheinlich ein Alter alte) problem, so hoffe jemand kann etwas Licht. Ich brauche, um 1 distinct-Spalte zusammen mit anderen, nicht unterschiedliche Spalten in mySQL.
Ich habe folgende Tabelle in mySQL:
id name destination rating country
----------------------------------------------------
1 James Barbados 5 WI
2 Andrew Antigua 6 WI
3 James Barbados 3 WI
4 Declan Trinidad 2 WI
5 Steve Barbados 4 WI
6 Declan Trinidad 3 WI
Ich würde, wie die SQL-Anweisung zur Rückgabe der EINDEUTIGEN Namen zusammen mit dem Ziel, die Bewertung basiert auf Land.
id name destination rating country
----------------------------------------------------
1 James Barbados 5 WI
2 Andrew Antigua 6 WI
4 Declan Trinidad 2 WI
5 Steve Barbados 4 WI
Wie Sie sehen können, James und Declan haben unterschiedliche Bewertungen, aber dem gleichen Namen, so werden Sie wieder nur einmal.
Die folgende Abfrage gibt alle Zeilen, denn die Bewertungen sind anders. Gibt es trotzdem, ich kann dem obigen Ergebnis einstellen?
SELECT (distinct name), destination, rating
FROM table
WHERE country = 'WI'
ORDER BY id
InformationsquelleAutor der Frage user1038814 | 2011-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe einer Unterabfrage, Sie können Holen Sie sich die höchste
id
für jeden Namen, und wählen Sie dann den rest der Zeilen basierend auf:Wenn Sie es vorziehen, verwenden Sie
MIN(id)
um den ersten Datensatz für jeden Namen statt der letzten.Kann es auch mit einem
INNER JOIN
gegen die Unterabfrage. Zu diesem Zweck wird die Leistung sollte ähnlich sein, und manchmal brauchen Sie, um uns auf zwei Spalten der Unterabfrage ist.InformationsquelleAutor der Antwort Michael Berkowski
Das problem ist, dass verschiedene Werke über den gesamten zurück gesetzt und nicht nur das erste Feld. Ansonsten MySQL weiß gar nicht, welcher Datensatz zurück. Also, Sie wollen, um irgendeine Art von Gruppe Funktion bei der Beurteilung, ob MAX, MIN, GROUP_CONCAT, AVG, oder verschiedene andere Funktionen.
Michael hat schon geschrieben, eine gute Antwort, so werde ich nicht zu re-schreiben Sie die Abfrage.
InformationsquelleAutor der Antwort Brian Hoover
Können Sie eine
group by
:InformationsquelleAutor der Antwort rcdmk
Stimme ich mit @rcdmk . Mit einer ABHÄNGIGEN Unterabfrage kann töten, performance -, GROUP BY-scheint besser geeignet, vorausgesetzt, Sie haben bereits Indiziert die Land Feld und nur ein paar Zeilen erreichen den server. Das umschreiben der Abfrage giben von @rcdmk , ich habe das ORDER BY NULL - Klausel zu unterdrücken, die implizite Bestellung von GROUP by, um es ein wenig schneller:
InformationsquelleAutor der Antwort wisefish