Найти максимальную и вторую максимальную зарплату для таблицы сотрудников 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 результата для желаемого результата
Ответы
Ответ 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
сначала найдите самую высокую зарплату
затем вычесть все салаиты из высшей зарплаты
найти минимум среди них
вычесть минимальный размер, полученный из наивысшей зарплаты
полученный результат - вторая самая высокая зарплата
Я не знаю запрос, но логика верна.