sql >> Databáze >  >> RDS >> Mysql

Funkce MAX v klauzuli where mysql

Nemůžeme odkazovat na výsledek agregační funkce (například MAX() ) v WHERE klauzule stejného SELECT .

Normativním vzorem pro řešení tohoto typu problému je použití inline pohledu, něco takového:

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

Toto je jen jeden způsob, jak dosáhnout zadaného výsledku. Existuje několik dalších přístupů, jak dosáhnout stejného výsledku, a některé z nich mohou být mnohem méně účinné než jiné. Další odpovědi demonstrují tento přístup:

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

Někdy je nejjednodušším přístupem použít ORDER BY s LIMIT. (Všimněte si, že tato syntaxe je specifická pro MySQL)

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

Všimněte si, že to vrátí pouze jeden řádek; takže pokud existuje více než jeden řádek se stejnou hodnotou id, nevrátí je všechny. (První dotaz vrátí VŠECHNY řádky, které mají stejnou hodnotu id.)

Tento přístup lze rozšířit tak, aby získal více než jeden řádek. Pět řádků, které mají nejvyšší hodnoty id, můžete získat změnou na LIMIT 5 .

Všimněte si, že výkon tohoto přístupu závisí zejména na dostupnosti vhodného indexu (tj. s id jako PRIMÁRNÍ KLÍČ nebo jako úvodní sloupec v jiném indexu.) Vhodný index zlepší výkon dotazů pomocí všech těchto přístupů.



  1. vrátit sadu výsledků z funkce

  2. Jaký typ dat použít pro pole hashovaného hesla a jakou délku?

  3. Kdy použít jednoduché uvozovky, dvojité uvozovky a zadní zaškrtnutí v MySQL

  4. Nainstalujte icu4c verze 63 s Homebrew