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

MAX funktion i where klausul mysql

Vi kan ikke referere til resultatet af en aggregeret funktion (for eksempel MAX() ) i en WHERE klausul af samme SELECT .

Det normative mønster for at løse denne type problemer er at bruge en inline-visning, noget som dette:

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

Dette er kun én måde at få det angivne resultat på. Der er flere andre tilgange til at få det samme resultat, og nogle af dem kan være meget mindre effektive end andre. Andre svar viser denne tilgang:

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

Nogle gange er den enkleste tilgang at bruge en ORDER BY med en LIMIT. (Bemærk, at denne syntaks er specifik for MySQL)

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

Bemærk, at dette kun vil returnere én række; så hvis der er mere end én række med samme id-værdi, vil dette ikke returnere dem alle. (Den første forespørgsel vil returnere ALLE rækker, der har samme id-værdi.)

Denne tilgang kan udvides til at få mere end én række. Du kan få de fem rækker, der har de højeste id-værdier ved at ændre den til LIMIT 5 .

Bemærk, at denne tilgangs ydeevne er særligt afhængig af, at et passende indeks er tilgængeligt (dvs. med id som PRIMÆR NØGLE eller som den førende kolonne i et andet indeks.) Et passende indeks vil forbedre ydeevnen af ​​forespørgsler ved at bruge alle disse tilgange.



  1. Postgres:konverter enkelt række til flere rækker (unpivot)

  2. MySQL DATE_ADD brug, 5 dages interval

  3. Maksimalt antal poster i en MySQL-databasetabel

  4. Søger efter avanceret php/mysql-pagineringsscript