Как получить наивысшую зарплату сотрудников за столом - PullRequest
34 голосов
/ 14 сентября 2011

Это вопрос, который я получил сегодня днем:

Там в таблице содержатся ID, Имя и Зарплата сотрудников, получают имена сотрудников с наивысшей зарплатой в SQL Server

Вотмой ответ, я просто написал это на бумаге и не уверен, что это совершенно правильно, но, похоже, работает:

SELECT Name FROM Employees WHERE Salary = 
( SELECT DISTINCT TOP (1) Salary FROM Employees WHERE Salary NOT IN
 (SELECT DISTINCT TOP (1) Salary FROM Employees ORDER BY Salary DESCENDING)
ORDER BY Salary DESCENDING)

Я думаю, что это некрасиво, но это единственное решение, которое приходит мне в голову.

Можете ли вы предложить мне лучший запрос?

Большое спасибо.

Ответы [ 53 ]

0 голосов
/ 29 ноября 2016
SELECT *,DENSE_RANK() OVER (ORDER BY Salary Desc) AS Rnk
INTO #tmp1
FROM Employees

SELECT * FROM #tmp1 WHERE Rnk = 2
DROP TABLE #tmp1


SELECT Name,SALARY
FROM  Employees
WHERE  Salary = (SELECT MIN(Salary)
             FROM   (SELECT DISTINCT TOP (2) Salary
                     FROM   Employees
                     ORDER  BY Salary DESC) T);
0 голосов
/ 20 июля 2016

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

select * from (
   select ROW_NUMBER() over (order by [salary] desc) as sno,emp_name,   
   [salary] from [dbo].[Emp]
) t 
where t.sno =10

with t as
select top (1) * from       
  (select top (2) emp_name,salary from   [Emp]  e
   order by  salary desc) t
order  by salary asc
0 голосов
/ 03 мая 2017
SELECT lastname, firstname
FROM employees
WHERE salary IN(
    SELECT MAX(salary) 
    FROM employees 
    WHERE salary < (SELECT MAX(salary) FROM employees));

Итак, вот что делает код, упомянутый выше:

Возвращает фамилии, за которыми следуют имена сотрудников, у которых зарплата меньше максимальной зарплаты всех сотрудников.но это также максимальная зарплата остальных сотрудников, которые не имеют максимальной зарплаты.

Другими словами: возвращает имена сотрудников, у которых вторая максимальная зарплата.

0 голосов
/ 27 мая 2015
select salary from table order by salary desc limit 1,1

примечание: это работает только для MYSQL

0 голосов
/ 28 июля 2013

Вот простой подход:

select name
from employee
where salary=(select max(salary)
              from(select salary from employee
                   minus
                   select max(salary) from employee));
0 голосов
/ 03 марта 2017

Попробуйте это для MSSQL:

SELECT
    TOP 1 salary
FROM
    (
        SELECT
            TOP 2 salary
        FROM
            Employees 
    ) sal
ORDER BY
    salary DESC;

Но вы должны попробовать этот общий запрос SQL, который работает для всех типов баз данных.

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

OR

SELECT
    MAX(Salary)
FROM
    Employee
WHERE
    Salary < (
        SELECT
            Max(Salary)
        FROM
            Employee
    );
0 голосов
/ 08 июня 2015

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

select name,salary from employee where salary =
(select max(salary) from employee where salary < (select max(salary) from employee ))
0 голосов
/ 29 августа 2015

Предположим, у нас есть таблица типа

name       salary
 A           10
 B           30
 C           20
 D           40

, поэтому сначала мы упорядочим в порядке убывания 40 30 20 10 =>

, затем мы возьмем только первые два числа.=> 40 30

затем мы расположим его в порядке возрастания => 30 40

, тогда мы возьмем первое число => 30

, поэтому в mysql ::

SELECT * FROM (SELECT  * FROM employee   order by salary DESC LIMIT 2) order by salary ASC LIMIT 1;

в оракуле ::

SELECT * FROM (SELECT  * FROM employee  where rownum<=2 order by salary DESC )  where rownum<=1  order by salary ASC ;
0 голосов
/ 17 сентября 2015

для n-й самой высокой зарплаты.это простой способ

select t.name,t.sal
from (select name,sal,dense_rank() over (order by sal desc) as rank from emp) t
where t.rank=6; //suppose i find 6th highest salary
0 голосов
/ 26 июля 2018

У меня есть таблица, подобная этой, на этом изображении ниже, и я собираюсь найти второе по величине число в столбце "to_user". enter image description here

Вот ответ

выберите MAX (to_user) ОТ db.masterledger, где to_user NOT IN (ВЫБЕРИТЕ МАКС (to_user) ОТ db.masterledger);

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