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

Найти максимальную и вторую максимальную зарплату для таблицы сотрудников MySQL

Предположим, вам предоставлена ​​следующая простая таблица базы данных, называемая Employee, которая имеет 2 столбца с именем Employee ID и Salary:

  Employee
  Employee ID    Salary
   3            200
   4            800
   7            450

Я хочу написать запрос select max (зарплата) как max_salary, 2nd_max_salary от сотрудника

то он должен возвращать

  max_salary   2nd_max_salary
   800             450

Я знаю, как найти вторую высшую зарплату

   SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )

или найти nth

  SELECT FROM Employee Emp1 WHERE (N-1) = ( SELECT COUNT(DISTINCT(Emp2.Salary)) FROM Employee Emp2
  WHERE Emp2.Salary > Emp1.Salary)

но я не могу понять, как объединить эти 2 результата для желаемого результата

4b9b3361

Ответ 1

Вы можете просто запустить 2 запроса в качестве внутренних запросов, чтобы вернуть 2 столбца:

select
  (SELECT MAX(Salary) FROM Employee) maxsalary,
  (SELECT MAX(Salary) FROM Employee
  WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as [2nd_max_salary]

Демо-версия SQL Fiddle

Ответ 2

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

SELECT (select max(Salary) from Employee) as MAXinmum),(max(salary) FROM Employee WHERE salary NOT IN (SELECT max(salary)) FROM Employee);

(или)

Попробуйте это, n будет n-м элементом, который вы хотите вернуть

 SELECT DISTINCT(Salary) FROM table ORDER BY Salary DESC LIMIT n,1

В вашем случае

 SELECT DISTINCT(column_name) FROM table_name ORDER BY column_name DESC limit 2,1;

Ответ 3

Лучшее и простое решение: -

 SELECT
    max(salary)
FROM
    salary
WHERE
    salary < (
        SELECT
            max(salary)
        FROM
            salary
    );

Ответ 4

Самый простой способ получить вторую максимальную зарплату и n-я зарплату

select 
 DISTINCT(salary) 
from employee 
 order by salary desc 
limit 1,1

Примечание:

limit 0,1  - Top max salary

limit 1,1  - Second max salary

limit 2,1  - Third max salary

limit 3,1  - Fourth max salary

Ответ 5

Вы можете написать 2 подзапроса, подобных этому примеру

SELECT (select max(Salary) from Employee) as max_id, 
     (select Salary from Employee order by Salary desc limit 1,1) as max_2nd 

Ответ 6

$q="select * from info order by salary desc limit 1,0"; // display highest 2 salary

или

$q="select * from info order by salary desc limit 1,0"; // display 2nd highest salary

Ответ 7

Я думаю, что простой способ в оракуле таков:

SELECT Salary FROM
(SELECT DISTINCT Salary FROM Employee ORDER BY Salary desc)
WHERE ROWNUM <= 2;

Ответ 8

`select max(salary) as first, (select salary from employee order by salary desc limit 1, 1) as second from employee limit 1`

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

Ответ 9

попробуйте это

select max(salary) as first, 
       (select salary from employee order by salary desc limit 1, 1) as second 
from employee limit 1

Ответ 10

Вы можете написать SQL-запрос в любой из ваших любимых баз данных, например. MySQL, Microsoft SQL Server или Oracle. Вы также можете использовать функцию, специфичную для базы данных, например. TOP, LIMIT или ROW_NUMBER, чтобы написать SQL-запрос, но вы также должны предоставить общее решение, которое должно работать со всей базой данных. Фактически, есть несколько способов найти вторую самую высокую зарплату, и вы должны знать пару из них, например. в MySQL без использования ключевого слова LIMIT в SQL Server без использования TOP и в Oracle без использования RANK и ROWNUM.

Общий запрос SQL:

SELECT
    MAX(salary)
FROM
    Employee
WHERE
    Salary NOT IN (
        SELECT
            Max(Salary)
        FROM
            Employee
    );

Другое решение, использующее sub-запрос вместо предложения NOT IN. Он использует оператор <.

SELECT
    MAX(Salary)
FROM
    Employee
WHERE
    Salary < (
        SELECT
            Max(Salary)
        FROM
            Employee
    );

Ответ 11

Найти максимальную заработную плату сотрудника

Выберите MAX (Зарплата) от Employee

Найти вторую самую высокую зарплату

Выберите MAX (Зарплата) от Employee Если зарплата не включена (выберите MAX (Зарплата) от сотрудника)

ИЛИ

SELECT MAX (Зарплата) от сотрудника ГДЕ Зарплата < > (выберите MAX (Зарплата) от Сотрудника)

Найти Nth Max Salary и для краткости www.gurujipoint.com

Ответ 12

Я думаю, что это самый простой способ найти MAX и вторую MAX зарплату. Вы можете попробовать этот путь.

SELECT MAX(Salary) FROM Employee; -- For Maximum Salary.

SELECT MAX(Salary) FROM Employee WHERE Salary < (SELECT MAX(Salary) FROM Employee); -- For Second Maximum Salary

Ответ 13

Не очень хороший запрос, но:

SELECT * from (
    SELECT max(Salary) from Employee
    ) as a
LEFT OUTER JOIN 
    (SELECT MAX(Salary) FROM Employee
        WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )) as b
ON 1=1

Ответ 14

Для уникальных зарплат (то есть сначала не может быть таким же, как и у второго):

SELECT
  MAX( s.salary ) AS max_salary,
  (SELECT
     MAX( salary ) 
   FROM salaries
   WHERE salary <> MAX( s.salary ) 
   ORDER BY salary DESC 
   LIMIT 1
  ) AS 2nd_max_salary
FROM salaries s

А также потому, что это такой ненужный способ решить эту проблему (может ли кто-нибудь сказать 2 строки вместо 2 столбцов, LOL?)

Ответ 15

Try

SELECT 

   SUBSTRING( GROUP_CONCAT( Salary ), 1 , LOCATE(",", GROUP_CONCAT( Salary ) ) -1 ) AS max_salary,

   SUBSTRING( GROUP_CONCAT( Salary ), LOCATE(",", GROUP_CONCAT( Salary ) ) +1 ) AS second_max_salary

FROM 
   (
     SELECT Salary FROM `Employee` ORDER BY Salary DESC LIMIT 0,2
   ) a

Демо здесь

Ответ 16

Для второй высшей зарплаты это работает для меня:

SELECT salary
FROM employee
WHERE salary 
NOT IN (
SELECT MAX( salary ) 
FROM employee
ORDER BY salary DESC
)
LIMIT 1

Ответ 17

Это потрясающий запрос, чтобы найти n-й максимум: Например: -

  • Вы хотите найти зарплату 8-я рядовая зарплата, просто изменили индексированное значение на 8.

  • Предположим, что у вас есть 100 строк с зарплатой. Теперь вы хотите найти максимальную зарплату за 90-ю строку. Просто изменил индексированное значение на 90.

    set @n:=0;
    select * from (select *, (@n:[email protected]+1) as indexed from employee order by Salary desc)t where t.indexed = 1;
    

Ответ 18

с общим выражением таблицы

With cte as (
 SELECT 
   ROW_NUMBER() Over (Order By Salary Desc) RowNumber, 
   Max(Salary) Salary 
 FROM
     Employee
 Group By Salary
)

Select * from cte where RowNumber = 2

Ответ 19

без вложенного запроса

select max(e.salary) as max_salary, max(e1.salary) as 2nd_max_salary 
from employee as e
left join employee as e1 on e.salary != e1.salary
group by e.salary desc limit 1;

Ответ 20

Здесь измените значение n согласно вашему требованию:

SELECT top 1 amount 
FROM ( 
    SELECT DISTINCT top n amount 
    FROM payment 
    ORDER BY amount DESC ) AS temp 
ORDER BY amount

Ответ 21

Это должно работать так же:

SELECT MAX(salary) max_salary,
  (SELECT MAX(salary)
   FROM Employee
   WHERE salary NOT IN
       (SELECT MAX(salary)
        FROM Employee)) 2nd_max_salary
FROM Employee

Ответ 22

Возможно, этот запрос работает. Найдите N-й наивысший номер оклада. Что я узнал от г-на Кудвенката.

Select DISTINCT TOP 1 salary
from 
(Select DISTINCT TOP *nth_No* salary
from Employee
ORDER BY Salary DESC)
Result
ORDER BY Salary

Ответ 23

Если мы хотим найти Employee, который получает 3-ей самую высокую зарплату, выполните этот запрос

SELECT a.employeeid, 
       a.salary 
FROM  (SELECT employeeid, 
              salary, 
              Dense_rank() 
                OVER( 
                  ORDER BY salary) AS n 
       FROM   employee) AS a 
WHERE  n = 3 

Что вы хотите

Ответ 24

Это будет работать. Чтобы найти n-е максимальное число

SELECT 
    TOP 1 * from (SELECT TOP  nth_largest_no * FROM Products Order by price desc) ORDER BY price asc;

Для пятого наибольшего числа

SELECT 
  TOP 1 *  from (SELECT TOP  5 * FROM Products Order by price desc) ORDER BY price asc;

Ответ 25

select e.salary from( SELECT * FROM Employee group by salary order by salary desc limit 2 ) e order by salary asc limit 1;

Ответ 26

Вот еще одно решение, которое использует вспомогательный запрос, но вместо предложения IN оно использует < Оператор

SELECT MAX(Salary) From Employees WHERE Salary < ( SELECT Max(Salary) FROM Employees);

Ответ 27

select * from emp where sal =(select max(sal) from emp where eno in(select eno from emp where sal <(select max(sal)from emp )));

попробуйте приведенный выше код....

если вы хотите получить третью максимальную запись, добавьте еще один вложенный запрос "выберите max (sal) из emp" внутри скобки последнего запроса и дайте меньше оператора перед ним.

Ответ 28

select * from
  Employees where Sal >=
  (SELECT
    max(Sal)
FROM
    Employees
WHERE
    Sal < (
        SELECT
            max(Sal)
        FROM
            Employees; 
    ));

Ответ 29

Макс. зарплата:

select max(salary) from tbl_employee <br><br>

Вторая максимальная зарплата:

select max(salary) from tbl_employee where salary < ( select max(salary) from tbl_employee);

Ответ 30

сначала найдите самую высокую зарплату затем вычесть все салаиты из высшей зарплаты найти минимум среди них вычесть минимальный размер, полученный из наивысшей зарплаты полученный результат - вторая самая высокая зарплата Я не знаю запрос, но логика верна.