Получить второе по величине значение в таблице MySQL - PullRequest
23 голосов
/ 19 марта 2011

У меня есть таблица сотрудников и зарплат, определенная таким образом:

"name" (type: VARCHAR)
"salary" (type: INTEGER)

Какой запрос я могу использовать, чтобы получить вторую самую высокую зарплату в этой таблице?

Ответы [ 28 ]

43 голосов
/ 19 марта 2011

Вот тот, который учитывает связи.

Name    Salary
Jim       6
Foo       5
Bar       5
Steve     4

SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees WHERE salary < (SELECT MAX(salary) FROM employees))

Result --> Bar 5, Foo 5

РЕДАКТИРОВАТЬ: Я взял второй пост Маноджа, настроил его и сделал его немного более читабельным для человека.Для меня n-1 не является интуитивным;однако, используя нужное мне значение, 2 = 2-е, 3 = 3-е и т. д.

/* looking for 2nd highest salary -- notice the '=2' */
SELECT name,salary FROM employees
WHERE salary = (SELECT DISTINCT(salary) FROM employees as e1
WHERE (SELECT COUNT(DISTINCT(salary))=2 FROM employees as e2
WHERE e1.salary <= e2.salary)) ORDER BY name

Result --> Bar 5, Foo 5
40 голосов
/ 08 ноября 2012

Прямой ответ за второй по величине оклад

SELECT name, salary
FROM employees ORDER BY `employees`.`salary` DESC LIMIT 1 , 1

еще одно интересное решение

SELECT salary 
FROM emp 
WHERE salary = (SELECT DISTINCT(salary) 
                FROM emp as e1 
                WHERE (n) = (SELECT COUNT(DISTINCT(salary)) 
                             FROM emp as e2 
                             WHERE e1.salary <= e2.salary))
13 голосов
/ 21 марта 2014

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

SELECT DISTINCT salary FROM employees ORDER BY salary DESC LIMIT 1,1 ;

образец скрипта: https://www.db -fiddle.com / f / v4gZUMFbuYorB27AH9yBKy / 0

9 голосов
/ 19 марта 2011
create table svalue (
name varchar(5),
value int
) engine = myisam;

insert into svalue value ('aaa',30),('bbb',10),('ccc',30),('ddd',20);

select * from svalue where value = (
select value 
from svalue
group by value
order by  value desc limit 1,1)
5 голосов
/ 30 ноября 2012

ДЛЯ ВТОРОГО ПОСЛЕДНЕГО:

SELECT name, salary
    FROM employee 
    ORDER BY salary DESC
    LIMIT 1 , 1

ДЛЯ ТРЕТЬЕГО ПОСЛЕДНЕГО:

SELECT name, salary
    FROM employee 
    ORDER BY salary DESC
    LIMIT 2 , 1
3 голосов
/ 04 ноября 2014

Вы можете использовать этот запрос ниже

SELECT emp.name, emp.salary 
FROM employees emp 
WHERE 2 = (SELECT COUNT(DISTINCT salary) 
           FROM employees 
           WHERE emp.salary<=salary
          );

Вы можете изменить 2 на желаемую высшую запись.

3 голосов
/ 11 декабря 2014

Чтобы получить вторую самую высокую зарплату, просто используйте запрос ниже

SELECT salary FROM employees
ORDER BY salary DESC LIMIT 1,1;
3 голосов
/ 11 июля 2017

Чтобы получить второе по величине значение:

SELECT `salary` FROM `employees` ORDER BY `salary` DESC LIMIT 1, 1;
3 голосов
/ 13 декабря 2012

Нашел другое интересное решение

SELECT salary 
FROM emp 
WHERE salary = (SELECT DISTINCT(salary) 
                FROM emp as e1 
                WHERE (n) = (SELECT COUNT(DISTINCT(salary)) 
                             FROM emp as e2 
                             WHERE e1.salary <= e2.salary))

Извините.Забыл написать.n - это номер зарплаты, который вы хотите.

3 голосов
/ 03 ноября 2012

простое решение

SELECT * FROM TBLNAME ORDER BY COLNAME ASC LIMIT (n - x), 1

Примечание: n = общее количество записей в столбце

  x = value 2nd, 3rd, 4th highest etc

например,

//to find employee with 7th highest salary

n = 100
x = 7

SELECT * FROM tbl_employee ORDER BY salary ASC LIMIT 93, 1

надеюсь, это поможет

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