2016-06-11 2 views
1

Мне нужно получить все данные о строках пользователя с третьей самой высокой зарплатой.Выберите всю строку, а также третью самую высокую зарплату

Мой запрос

select min(salary)as minsalary from (select * from userdetails 
     order by salary desc limit 3) as details 

Токовый выход: -

Array 
(
    [0] => stdClass Object 
    (
     [minsalary] => 300 
    ) 

) 

я нужно получить полную информацию строк тоже вместе с этим массивом как один выход массива. Как я могу изменить свой запрос.

Пожалуйста, помогите.

ответ

2

Попробуйте это: -

SELECT * FROM userdetails ORDER BY salary DESC limit 2,1; 

Другой способ найти nth Highest salary может быть: -

SELECT * FROM userdetails usr1 
WHERE (n-1) = ( 
    SELECT COUNT(DISTINCT(usr2.salary)) 
    FROM userdetails usr2 
    WHERE usr2.salary > usr1.salary) 
+0

спасибо так много, может я знаю, как работает второй запрос, нужно ли нам пройти значение n динамически? – youv

+0

Для каждой записи для внешнего запроса выполняется внутренний запрос и возвращает количество записей, размер которых меньше, чем текущая зарплата. Поскольку вы ищете 3-ей самую высокую зарплату, она прекратится, как только внутренний запрос вернет 2 (3-1); –