Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonction MAX dans la clause where mysql

Nous ne pouvons pas référencer le résultat d'une fonction d'agrégation (par exemple MAX() ) dans un WHERE clause du même SELECT .

Le modèle normatif pour résoudre ce type de problème consiste à utiliser une vue en ligne, quelque chose comme ceci :

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

Ce n'est qu'une façon d'obtenir le résultat spécifié. Il existe plusieurs autres approches pour obtenir le même résultat, et certaines d'entre elles peuvent être beaucoup moins efficaces que d'autres. D'autres réponses illustrent cette approche :

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

Parfois, l'approche la plus simple consiste à utiliser un ORDER BY avec une LIMIT. (Notez que cette syntaxe est spécifique à MySQL)

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

Notez que cela ne renverra qu'une seule ligne ; donc s'il y a plus d'une ligne avec la même valeur d'id, cela ne les renverra pas toutes. (La première requête renverra TOUTES les lignes qui ont la même valeur d'identifiant.)

Cette approche peut être étendue pour obtenir plus d'une ligne, vous pouvez obtenir les cinq lignes qui ont les valeurs d'identifiant les plus élevées en la remplaçant par LIMIT 5 .

Notez que les performances de cette approche dépendent particulièrement de la disponibilité d'un index approprié (c'est-à-dire avec id comme CLÉ PRIMAIRE ou comme colonne principale dans un autre index.) Un index approprié améliorera les performances des requêtes utilisant toutes ces approches.