Mysql
 sql >> Database >  >> RDS >> Mysql

Funzione MAX in cui clausola mysql

Non possiamo fare riferimento al risultato di una funzione aggregata (ad esempio MAX() ) in un WHERE clausola dello stesso SELECT .

Il modello normativo per risolvere questo tipo di problema consiste nell'utilizzare una vista in linea, qualcosa del genere:

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

Questo è solo un modo per ottenere il risultato specificato. Esistono molti altri approcci per ottenere lo stesso risultato e alcuni di questi possono essere molto meno efficienti di altri. Altre risposte dimostrano questo approccio:

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

A volte, l'approccio più semplice consiste nell'utilizzare un ORDER BY con un LIMIT. (Nota che questa sintassi è specifica per MySQL)

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

Nota che questo restituirà solo una riga; quindi se c'è più di una riga con lo stesso valore id, questo non le restituirà tutte. (La prima query restituirà TUTTE le righe che hanno lo stesso valore id.)

Questo approccio può essere esteso per ottenere più di una riga, puoi ottenere le cinque righe con i valori id più alti modificandolo in LIMIT 5 .

Si noti che le prestazioni di questo approccio dipendono in particolare dalla disponibilità di un indice adeguato (ad esempio con id come CHIAVE PRIMARIA o come colonna principale in un altro indice.) Un indice adeguato migliorerà le prestazioni delle query utilizzando tutti questi approcci.