Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MAX-Funktion in der Where-Klausel mysql

Wir können nicht auf das Ergebnis einer Aggregatfunktion verweisen (zum Beispiel MAX() ) in einem WHERE -Klausel desselben SELECT .

Das normative Muster zur Lösung dieser Art von Problemen ist die Verwendung einer Inline-Ansicht, etwa so:

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
  JOIN ( SELECT MAX(mx.id) AS max_id
           FROM mytable mx
       ) m
    ON m.max_id = t.id

Dies ist nur eine Möglichkeit, das angegebene Ergebnis zu erhalten. Es gibt mehrere andere Ansätze, um das gleiche Ergebnis zu erzielen, und einige davon können viel weniger effizient sein als andere. Andere Antworten veranschaulichen diesen Ansatz:

 WHERE t.id = (SELECT MAX(id) FROM ... )

Manchmal ist es am einfachsten, ein ORDER BY mit einem LIMIT zu verwenden. (Beachten Sie, dass diese Syntax spezifisch für MySQL ist)

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
 ORDER BY t.id DESC
 LIMIT 1

Beachten Sie, dass dies nur eine Zeile zurückgibt; Wenn also mehr als eine Zeile mit demselben ID-Wert vorhanden ist, werden nicht alle zurückgegeben. (Die erste Abfrage gibt ALLE Zeilen zurück, die denselben ID-Wert haben.)

Dieser Ansatz kann erweitert werden, um mehr als eine Zeile zu erhalten. Sie könnten die fünf Zeilen mit den höchsten ID-Werten erhalten, indem Sie sie auf LIMIT 5 ändern .

Beachten Sie, dass die Leistung dieses Ansatzes insbesondere davon abhängt, ob ein geeigneter Index verfügbar ist (d. h. mit id B. als PRIMARY KEY oder als führende Spalte in einem anderen Index.) Ein geeigneter Index verbessert die Leistung von Abfragen, die alle diese Ansätze verwenden.