Mysql
 sql >> база данни >  >> RDS >> Mysql

MAX функция в where клауза mysql

Не можем да препращаме към резултата от агрегатна функция (например MAX() ) в WHERE клауза на същия SELECT .

Нормативният модел за решаване на този тип проблеми е да се използва вграден изглед, нещо като това:

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

Това е само един от начините да получите посочения резултат. Има няколко други подхода за постигане на същия резултат и някои от тях могат да бъдат много по-малко ефективни от други. Други отговори демонстрират този подход:

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

Понякога най-простият подход е да използвате ORDER BY с LIMIT. (Обърнете внимание, че този синтаксис е специфичен за MySQL)

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

Имайте предвид, че това ще върне само един ред; така че ако има повече от един ред с една и съща стойност на идентификатора, тогава това няма да върне всички. (Първата заявка ще върне ВСИЧКИ редове, които имат една и съща стойност на идентификатора.)

Този подход може да бъде разширен, за да получите повече от един ред, можете да получите петте реда, които имат най-високите стойности на идентификатор, като го промените на LIMIT 5 .

Имайте предвид, че ефективността на този подход зависи особено от наличието на подходящ индекс (т.е. с id като ПЪРВИЧЕН КЛЮЧ или като водеща колона в друг индекс.) Подходящ индекс ще подобри производителността на заявките, използващи всички тези подходи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql подреждане по сериализирани данни?

  2. Django MySQL отделна заявка за получаване на множество стойности

  3. mysql със стойности, разделени със запетая

  4. mysql_real_escape_string VS добавя наклонени черти

  5. MySQL Къде датата е по-голяма от един месец?