Подтвердить что ты не робот

Получите второе наибольшее значение в таблице MySQL

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

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

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

4b9b3361

Ответ 1

Здесь указывается связь.

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

EDIT: Я взял второй пост Manoj, изменил его и сделал его более понятным для человека. Для меня n-1 не является интуитивным; однако, используя значение, которое я хочу, 2 = 2nd, 3 = 3rd и т.д.

/* 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

Ответ 2

Прямой ответ на вторую самую высокую зарплату

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))

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

Ответ 6

Чтобы отобразить записи, имеющие второе наибольшее значение метки:

SELECT username, mark
FROM tbl_one
WHERE mark = (
    SELECT DISTINCT mark
    FROM tbl_one
    ORDER by mark desc
    LIMIT 1,1
); 

Ответ 7

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

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

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

Ответ 8

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

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 - это n-ое число зарплат, которое вы хотите.

Ответ 9

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

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

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

Ответ 10

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

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

Ответ 11

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

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

Ответ 12

Простое решение приведено ниже в запросе:

select max(salary) as salary from employees where salary<(select max(salary) from employees);

Ответ 13

за 2-ую самую высокую зарплату

 select max(salary) from salary where salary not in (select top 1 salary from salary order by salary desc)

за 3-ей самую высокую зарплату

 select max(salary) from salary where salary not in (select top 2 salary from salary order by salary desc)

и т.д.

Ответ 14

Чтобы получить наивысшее значение * N * th, лучше использовать это решение:

SELECT * FROM `employees`  WHERE salary =
         (SELECT DISTINCT(salary) FROM `employees` 
         ORDER BY salary DESC LIMIT {N-1},1);

или вы можете попробовать:

SELECT * FROM `employees` e1 WHERE 
        (N-1) = (SELECT COUNT(DISTINCT(salary)) 
        FROM `employees` e2 
        WHERE e1.salary < e2.salary ); 

N = 2 для второго наивысшего N = 3 для третьего наивысшего и т.д.

Ответ 15

SELECT name, salary 
FROM employees 
where
 salary = (SELECT (salary) FROM employees GROUP BY salary DESC LIMIT 1,1)

Ответ 16

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

Я пробовал это перед публикацией и прекрасно работает

например. найти 10-ю максимальную зарплату замените предел 9,1;

mysql> select name,salary from emp group by salary desc limit n-1,1;

Ответ 17

SELECT MAX(salary) salary
FROM tbl
WHERE salary <
  (SELECT MAX(salary)
   FROM tbl);

Ответ 18

SELECT DISTINCT Salary
FROM emp
ORDER BY salary DESC
LIMIT 1 , 1

Этот запрос даст вторую по величине зарплату дубликатов записей.

Ответ 19

Попробуйте следующее:

SELECT DISTINCT(`salary`)
    FROM `employee`

    ORDER BY `salary` DEC
    LIMIT 1,1

Ответ 20

SELECT MIN(id) as id FROM students where id>(SELECT MIN(id) FROM students);

Ответ 21

SELECT SALARY 
FROM (SELECT * 
      FROM EMPLOYEE 
      ORDER BY SALARY 
      DESC LIMIT ***2***) AS TOP_SALARY 
ORDER BY SALARY ASC 
LIMIT 1

Ответ 22

SELECT name, salary
FROM EMPLOYEES
WHERE salary = ( 
SELECT DISTINCT salary
FROM EMPLOYEES
ORDER BY salary DESC 
LIMIT 1 , 1 ) 

Ответ 23

with alias as
(
select name,salary,row_number() over(order by salary desc ) as rn from employees
)
select name,salary from alias where rn=n--n being the nth highest salary

Ответ 24

SELECT username, salary
FROM tblname
GROUP by salary
ORDER by salary desc
LIMIT 0,1 ;

Ответ 25

SELECT name, salary
FROM employees
order by salary desc limit 1,1

и этот запрос должен выполнить вашу работу. Сначала мы сортируем таблицу по нисходящему пути, так что человек с самой высокой зарплатой находится наверху, а второй самый высокий - на второй позиции. Теперь limit a,b означает пропустить начальные элементы a, а затем распечатать следующие элементы b. Поэтому в этом случае вы должны использовать limit 1,1.

Надеюсь, что это поможет.

Ответ 26

SELECT name,salary FROM employee
WHERE salary = (SELECT DISTINCT(salary) FROM employee ORDER BY salary DESC LIMIT 1,1) ORDER BY name

Ответ 27

Получите второй, третий, четвертый... N-я наивысшая зарплата, используя следующий запрос

SELECT MIN(salary) from employees WHERE salary IN( SELECT TOP N salary FROM employees ORDER BY salary DESC)

Замените N номером i.e N = 2 для второй самой высокой зарплаты, N = 3 для третьей самой высокой зарплаты и так далее. Таким образом, для получения второй самой высокой зарплаты

SELECT MIN(salary) from employees WHERE salary IN( SELECT TOP 2 salary FROM employees ORDER BY salary DESC)

Ответ 28

Попробуйте следующее:

Proc sql;
  select employee, salary
  from (select * from test having salary < max(salary)) 
   having salary = max(salary)
  ;
Quit;