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

Как найти third or nth максимальную зарплату от зарплаты table(EmpID,EmpName,EmpSalary) Оптимизированным способом?

Ответ 1

Используйте ROW_NUMBER (если вы хотите один) или DENSE_RANK (для всех связанных строк):

WITH CTE AS
(
    SELECT EmpID, EmpName, EmpSalary,
           RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
    FROM dbo.Salary
)
SELECT EmpID, EmpName, EmpSalary
FROM CTE
WHERE RN = @NthRow

Ответ 2

Номер строки:

SELECT Salary,EmpName
FROM
  (
   SELECT Salary,EmpName,ROW_NUMBER() OVER(ORDER BY Salary) As RowNum
   FROM EMPLOYEE
   ) As A
WHERE A.RowNum IN (2,3)

Sub Query:

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

Верхнее ключевое слово:

SELECT TOP 1 salary
FROM (
      SELECT DISTINCT TOP n salary
      FROM employee
      ORDER BY salary DESC
      ) a
ORDER BY salary

Ответ 3

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

SELECT TOP 1 salary FROM (
   SELECT TOP 3 salary 
   FROM employees 
   ORDER BY salary DESC) AS emp 
ORDER BY salary ASC

Для 3 вы можете заменить любое значение...

Ответ 4

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

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

SELECT MIN(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary DESC) 

для Ex: 3 максимальная зарплата:

SELECT MIN(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary DESC) 

N минимальная зарплата:

SELECT MAX(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP N EmpSalary FROM Salary ORDER BY EmpSalary ASC)

для Ex: 3 минимальная зарплата:

SELECT MAX(EmpSalary)
FROM Salary
WHERE EmpSalary IN(SELECT TOP 3 EmpSalary FROM Salary ORDER BY EmpSalary ASC)

Ответ 5

Слишком просто, если вы используете sub-запрос!

SELECT MIN(EmpSalary) from (
SELECT EmpSalary from Employee ORDER BY EmpSalary DESC LIMIT 3
);

Здесь вы можете просто изменить n-е значение после ограничения LIMIT.

Здесь в этом Sub-запрос выберите EmpSalary из Employee Order by EmpSalary DESC Limit 3; вернет верхнюю 3 зарплаты сотрудников. Из результата мы выберем минимальную зарплату с помощью команды MIN, чтобы получить 3-й ТОП-зарплату сотрудника.

Ответ 6

Замените N своим максимальным числом

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

Объяснение

Вышеприведенный запрос может быть довольно запутанным, если вы еще не видели ничего подобного - внутренний запрос - это то, что называется коррелированным подзапросом, потому что внутренний запрос (подзапрос) использует значение из внешнего запроса (в этом случае таблицу Emp1) в своем предложении WHERE.

И Источник

Ответ 7

Третья или n-я максимальная зарплата из таблицы зарплаты без использования подзапроса

select salary from salary
   ORDER   BY salary DESC
   OFFSET  N-1 ROWS
   FETCH NEXT 1 ROWS ONLY

За 3-ей самую высокую зарплату поставьте 2 вместо N-1

Ответ 8

SELECT Salary,EmpName
FROM
(
SELECT Salary,EmpName,DENSE_RANK() OVER(ORDER BY Salary DESC) Rno from EMPLOYEE
) tbl
WHERE Rno=3

Ответ 9

Обратитесь к следующему запросу, чтобы получить самую высокую зарплату. Таким образом, вы получаете nth самую высокую зарплату в MYSQL. Если вы хотите получить первую минимальную зарплату, вам нужно будет заменить DESC по ASC в запросе. nth highest salary

Ответ 10

Способ 1:

SELECT TOP 1 salary FROM (
SELECT TOP 3 salary 
 FROM employees 
  ORDER BY salary DESC) AS emp 
 ORDER BY salary ASC

Способ 2:

  Select EmpName,salary from
  (
    select EmpName,salary ,Row_Number() over(order by salary desc) as rowid      
     from EmpTbl)
   as a where rowid=3

Ответ 11

В 2008 году мы можем использовать ROW_NUMBER() OVER (ORDER BY EmpSalary DESC), чтобы получить ранг без связей, которые мы можем использовать.

Например, мы можем получить 8-е место по этому пути или изменить @N на что-то другое или использовать его в качестве параметра в функции, если хотите.

DECLARE @N INT = 8;
WITH rankedSalaries AS
(
SELECT
EmpID
,EmpName
,EmpSalary,
,RN = ROW_NUMBER() OVER (ORDER BY EmpSalary DESC)
FROM salary
)
SELECT
EmpID
,EmpName
,EmpSalary
FROM rankedSalaries
WHERE RN = @N;

В SQL Server 2012, как вы знаете, это выполняется более интуитивно с помощью LAG().

Ответ 12

SELECT EmpSalary 
FROM salary_table 
GROUP BY EmpSalary 
ORDER BY EmpSalary DESC LIMIT n-1, 1;

Ответ 13

Это один из популярных вопросов в любом интервью SQL. Я собираюсь записать различные запросы, чтобы узнать n-е наивысшее значение столбца.

Я создал таблицу с именем "Emloyee", выполнив ниже script.

CREATE TABLE Employee([Eid] [float] NULL,[Ename] [nvarchar](255) NULL,[Basic_Sal] [float] NULL)

Теперь я собираюсь вставить 8 строк в эту таблицу, выполнив ниже инструкции insert.

insert into Employee values(1,'Neeraj',45000)
insert into Employee values(2,'Ankit',5000)
insert into Employee values(3,'Akshay',6000)
insert into Employee values(4,'Ramesh',7600)
insert into Employee values(5,'Vikas',4000)
insert into Employee values(7,'Neha',8500)
insert into Employee values(8,'Shivika',4500)
insert into Employee values(9,'Tarun',9500)

Теперь мы найдем 3-й самый высокий Basic_sal из приведенной выше таблицы, используя разные запросы. Я выполнил нижний запрос в студии управления, а ниже - результат.

select * from Employee order by Basic_Sal desc

В приведенном выше изображении мы можем видеть, что 3-я высшая базовая зарплата будет 8500. Я пишу 3 разных способа сделать то же самое. Запустив все три упомянутых ниже запроса, мы получим тот же результат, то есть 8500.

Первый способ: - использование функции номера строки

select Ename,Basic_sal
from(
            select Ename,Basic_Sal,ROW_NUMBER() over (order by Basic_Sal desc) as rowid from Employee
      )A
where rowid=2

Ответ 14

declare @maxNthSal as nvarchar(20)
SELECT TOP 3 @maxNthSal=GRN_NAME FROM GRN_HDR   ORDER BY GRN_NAME DESC
print @maxNthSal

Ответ 15

Select TOP 1 Salary as '3rd Highest Salary' from (SELECT DISTINCT TOP 3 Salary from Employee ORDER BY Salary DESC) a ORDER BY Salary ASC;

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

Ответ 16

SELECT MIN(COLUMN_NAME)
FROM   (
           SELECT DISTINCT TOP 3     COLUMN_NAME
           FROM   TABLE_NAME
           ORDER BY
                  COLUMN_NAME        DESC
       ) AS 'COLUMN_NAME'

Ответ 17

- nth самая высокая зарплата

select * 
from (select lstName, salary, row_number() over( order by salary desc) as rn 
      from employee) tmp
where rn = 2

- (nth -1) высшая зарплата

select * 
from employee e1
where 1 = (select count(distinct salary)  
           from employee e2
           where e2.Salary > e1.Salary )

Ответ 18

Оптимизированный способ: вместо подзапроса просто используйте лимит.

select distinct salary from employee order by salary desc limit nth, 1;

См. здесь синтаксис ограничений http://www.mysqltutorial.org/mysql-limit.aspx

Ответ 19

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

SELECT * FROM tableName ORDER BY columnName DESC LIMIT 2, 1

Ответ 20

В подзапросе:

SELECT salary from
(SELECT rownum ID, EmpSalary salary from
(SELECT DISTINCT EmpSalary from salary_table order by EmpSalary DESC)
where ID = nth)

Ответ 21

Попробуйте этот запрос

SELECT DISTINCT salary
FROM emp E WHERE
&no =(SELECT COUNT(DISTINCT salary) 
FROM emp WHERE E.salary <= salary)

Положите n = какое значение вы хотите

Ответ 22

set @n = $n

SELECT a.* FROM ( select a.* , @rn = @rn+1  from EMPLOYEE order by a.EmpSalary desc ) As a  where rn = @n

Ответ 23

Решение для тестирования MySQL, предположим, что N = 4:

select min(CustomerID) from (SELECT distinct CustomerID FROM Customers order by CustomerID desc LIMIT 4) as A;

Другой пример:

select min(country) from (SELECT distinct country FROM Customers order by country desc limit 3);

Ответ 24

Попробуйте этот код: -

SELECT *
   FROM one one1
   WHERE ( n ) = ( SELECT COUNT( one2.salary )
                   FROM one one2
                   WHERE one2.salary >= one1.salary
                 )

Ответ 25

Чтобы запросить nth highest bonus, скажем n=10, используя AdventureWorks2012, попробуйте следующий код

USE AdventureWorks2012; 
GO

SELECT * FROM Sales.SalesPerson;
GO

DECLARE @grade INT;
SET @grade = 10;
SELECT MIN(Bonus)
FROM (SELECT TOP (@grade) Bonus FROM (SELECT DISTINCT(Bonus) FROM Sales.SalesPerson) AS a ORDER BY Bonus DESC) AS g

Ответ 26

другой способ найти последние самые высокие данные на основе даты

SELECT A.JID,A.EntryDate,RefundDate,Comments,Refund, ActionBy FROM (
(select JID, Max(EntryDate) AS EntryDate from refundrequested GROUP BY JID) A 
Inner JOIN (SELECT JID,ENTRYDATE,refundDate,Comments,refund,ActionBy from refundrequested) B 
ON A.JID=B.JID AND A.EntryDate = B.EntryDate) 

Ответ 27

//вы можете найти n-й зарплату из таблицы. Если вы хотите получить 2-ую самую высокую зарплату, тогда поместите n = 2, если 3-й hs, а затем n = 3, как таковой..

SELECT *  FROM tablename t1 
WHERE (N-1) = (SELECT COUNT(DISTINCT(t2.Salary)) 
 FROM tablename t2
WHERE t2.Salary > t1.Salary)

Ответ 28

Вы можете попробовать следующее:

select top(1) EXPORT_NO
from DC_HDR 
order by CASE when  (ROW_NUMBER() over(order by EXPORT_NO desc))=3 then EXPORT_NO else 0 end desc

Ответ 29

select min(salary) 
from (select salary 
      from employee 
      where rownum < n+1 
      order by salary desc);

Ответ 30

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

select * from emp where sal=
(SELECT DISTINCT sal FROM emp ORDER BY sal DESC LIMIT 3,1) ;

Показана только 3-я самая высокая зарплата:

SELECT DISTINCT sal FROM emp ORDER BY sal DESC LIMIT 3,1