Общий способ в MySQL, чтобы получить лучшие результаты - PullRequest
1 голос
/ 01 мая 2009

Скажем, например, у меня есть таблица, в которой есть имена людей и их возраст. Я хочу общий запрос в MySQL, который вытащит n самых старых людей.

Я мог бы использовать что-то вроде этого:

SELECT * FROM people ORDER BY age DESC LIMIT 1;

Скажем, Фрэнку и Эмили по 99 лет. limit 1 вернет только одно из их имен. В psuedo-sql я бы хотел, чтобы запрос выглядел так:

SELECT * FROM people WHERE MAX(age);

Я знаю, вы также можете сделать это с помощью подзапроса, но должен быть более простой, более общий способ достижения этого?

Ответы [ 3 ]

2 голосов
/ 01 мая 2009

Нет, подзапрос это. Например, все с тремя лучшими возрастами:

SELECT * FROM people WHERE age IN (SELECT DISTINCT age FROM people ORDER BY age DESC LIMIT 3)

или просто самый высокий возраст:

SELECT * FROM people WHERE age = (SELECT MAX(age) FROM people)
1 голос
/ 01 мая 2009

Я знаю, что вы также можете сделать это с помощью подзапроса, но должен быть более простой, более общий способ достижения этого?

Нет в ANSI SQL.

SELECT * FROM people WHERE age = 
  (select MAX(age) from people);
0 голосов
/ 02 февраля 2011

@ cletus -

SELECT * 
FROM people 
WHERE age IN (SELECT DISTINCT age 
              FROM people 
              ORDER BY age DESC LIMIT 3) 

LIMIT не работает в подзапросе в MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...