MySQL: выбрать лучшие n максимальные значения?

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

Например, если строки N-1, N, N + 1 имеют одинаковые значения. Должен ли я вернуть just top N или top N + 1 строк.

Ответ 1

Если вы выполните:

select *
from t
order by value desc
limit N

Вы получите верхние N строк.

Если вы выполните:

select *
from t join
     (select min(value) as cutoff
      from (select value
            from t
            order by value
            limit N
           ) tlim
    ) tlim
    on t.value >= tlim;

Или вы могли бы рассказать об этом несколько проще:

select *
from t join
     (select value
      from t
      order by value
      limit N
    ) tlim
    on t.value = tlim.value;

Ниже приведено концептуально то, что вы хотите сделать, но оно может не работать в MySQL:

select *
from t
where t.value >= ANY (select value from t order by value limit N)

Ответ 2

Используйте следующий SQL-запрос.

SELECT salary FROM salesperson 
ORDER BY salary DESC
LIMIT 2,1

Ответ 3

Для этого вы должны использовать самоподключение.

  • сначала найдите верхние (n) возможные значения для столбчатого столбца
  • присоединить его к одной таблице на основе первичного ключа

Например, ниже таблицы примеров

CREATE TABLE `employee` (
  `ID` INT(11)   AUTO_INCREMENT PRIMARY KEY,
  `NAME` VARCHAR(50) NOT NULL,
   `SALARY` INT(11) NOT NULL , 
    JOINING_DATE TIMESTAMP  
) ENGINE=MYISAM 

INSERT INTO  employee (NAME,salary,joining_date)    VALUES('JAMES',50000,'2010-02-02'),
('GARGI',60000,'2010-02-02'),('DAN',30000,'2010-02-02'),('JOHN',10000,'2010-02-02'),('MICHEL',70000,'2010-02-02'),
('STIEVE',50000,'2010-02-02'),('CALRK',20000,'2010-02-02'),('BINNY',50000,'2010-02-02'),('SMITH',40000,'2010-02-02'),
('ROBIN',60000,'2010-02-02'),('CRIS',80000,'2010-02-02');

С приведенными выше табличными данными настройте Запрос, чтобы найти сотрудников с 3-мя зарплатами:

SELECT e1.* FROM 
(SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 3 ) S1
JOIN employee  e1 
ON e1.salary = s1.salary 
ORDER BY e1.salary DESC 

СОВЕТ: -

Если вам нужна верхняя 4, просто измените LIMIT 3 на LIMIT 4