Как получить наивысшую зарплату сотрудников за столом - 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 ]

1 голос
/ 17 февраля 2013

это простой запрос. Если вам нужен второй минимум, просто измените максимальное значение на минимальное и измените знак меньше чем (<) на больше, чем (>).

    select max(column_name) from table_name where column_name<(select max(column_name) from table_name)
1 голос
/ 04 декабря 2012
SELECT * 
FROM TABLE1 AS A 
WHERE NTH HIGHEST NO.(SELECT COUNT(ATTRIBUTE) FROM TABLE1 AS B) WHERE B.ATTRIBUTE=A.ATTRIBUTE;
1 голос
/ 10 октября 2012
SELECT name
FROM employee
WHERE salary =
(SELECT MIN(salary) 
  FROM (SELECT TOP (2) salary
  FROM employee
  ORDER BY salary DESC) )
1 голос
/ 10 сентября 2012

Можем ли мы также использовать

select e2.max(sal), e2.name
from emp e2
where (e2.sal <(Select max (Salary) from empo el))
group by e2.name

Пожалуйста, дайте мне знать, что не так с этим подходом

1 голос
/ 27 мая 2012
select max(age) from yd where age<(select max(age) from HK) ; /// True two table Highest 

SELECT * FROM HK E1 WHERE 1 =(SELECT COUNT(DISTINCT age) FROM HK E2 WHERE E1.age < E2.age); ///Second Hightest age RT single table 

select age from hk e1 where (3-1) = (select count(distinct (e2.age)) from yd e2 where e2.age>e1.age);//// same True Second Hight age RT two table

select max(age) from YD where age not in (select max(age) from YD);  //second hight age in single table 
1 голос
/ 14 сентября 2011
select * from emp where salary = (  
    select salary from   
       (select ROW_NUMBER() over (order by salary) as 'rownum', *
        from emp) t -- Order employees according to salary  
    where rownum = 2 -- Get the second highest salary
)
1 голос
/ 28 февраля 2014

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

SELECT employee_name 
FROM employee
WHERE salary = (SELECT max(salary) 
                FROM employee
                WHERE salary < (SELECT max(salary) 
                                FROM employee);
1 голос
/ 29 сентября 2016

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

    select * from
   (
    select name,salary,ROW_NUMBER() over( order by Salary desc) as
    rownum from    employee
   ) as t where t.rownum=2

http://askme.indianyouth.info/details/write-a-sql-query-to-find-the-10th-highest-employee-salary-from-an-employee-table-explain-your-answer-111

1 голос
/ 31 августа 2017

Здесь я использовал два запроса для следующих сценариев, которые задаются во время интервью
Первый сценарий:
Найти всю вторую по величине зарплату в таблице (Вторая по величине зарплата с более чем один сотрудник)

select * from emp where salary
   In (select MAX(salary) from emp where salary NOT IN (Select MAX(salary) from 
   emp));

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

select min(temp.salary) from (select * from emp order by salary desc limit 2) 
  temp;
1 голос
/ 20 ноября 2013

Попробуйте, чтобы получить соответствующую n-ю самую высокую зарплату.

SELECT
    *
FROM
    emp e1
WHERE
    2 = (
        SELECT
            COUNT(salary)
        FROM
            emp e2
        WHERE
            e2.salary >= e1.salary
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...