sql >> Databasteknik >  >> RDS >> Mysql

MAX-funktion i where-sats mysql

Vi kan inte referera till resultatet av en aggregerad funktion (till exempel MAX() ) i en WHERE sats av samma SELECT .

Det normativa mönstret för att lösa den här typen av problem är att använda en inlinevy, ungefär så här:

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

Detta är bara ett sätt att få det angivna resultatet. Det finns flera andra metoder för att få samma resultat, och vissa av dem kan vara mycket mindre effektiva än andra. Andra svar visar detta tillvägagångssätt:

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

Ibland är det enklaste sättet att använda en ORDER BY med en LIMIT. (Observera att denna syntax är specifik för MySQL)

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

Observera att detta endast returnerar en rad; så om det finns mer än en rad med samma id-värde kommer detta inte att returnera alla. (Den första frågan returnerar ALLA rader som har samma id-värde.)

Detta tillvägagångssätt kan utökas till att få mer än en rad, du kan få de fem raderna som har de högsta id-värdena genom att ändra det till LIMIT 5 .

Observera att prestandan för detta tillvägagångssätt är särskilt beroende av att ett lämpligt index är tillgängligt (dvs. med id som PRIMÄRNYCKEL eller som den ledande kolumnen i ett annat index.) Ett lämpligt index kommer att förbättra prestandan för frågor med alla dessa metoder.



  1. Jag försöker en enkel fråga med parametern in med mysql 5.5 genom jdbc-kod

  2. php-kategori, underkategoriträd

  3. hur man ger samma serienummer för en grupp av poster i mysql

  4. Prestandaskillnader mellan lika (=) och IN med ett bokstavligt värde