SQL-запрос, чтобы найти N-й наивысший заработок из таблицы зарплат

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

Ответ 1

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

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

Ответ 2

Если вы хотите найти n-я зарплата из таблицы (здесь n должно быть любой вещи, как 1-я или 2-я или 15-я самая высокая зарплата)

Это запрос для поиска n-й зарплаты:

SELECT DISTINCT Salary FROM tblemployee ORDER BY Salary DESC LIMIT 1 OFFSET (n-1)

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

SELECT DISTINCT Salary FROM tblemployee ORDER BY Salary DESC LIMIT 1 OFFSET 7

Примечание: OFFSET начинается с 0-й позиции и, следовательно, здесь используется правило N-1.

Ответ 3

Чтобы получить n-ую самую высокую зарплату, вам нужно сначала отсортировать данные с помощью ORDER BY, а затем выбрать n-ую самую высокую запись с помощью LIMIT с OFFSET.

SELECT DISTINCT(salary) AS salary
FROM tbl_salary
ORDER BY salary DESC
LIMIT 1 OFFSET (n - 1);

Ответ 4

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

Для каждой записи, обработанной внешним запросом, будет выполнен внутренний запрос и вернет, сколько записей имеет записи с зарплатой меньше текущей зарплаты. Если вы ищете вторую самую высокую зарплату, ваш запрос остановится, как только внутренний запрос вернет N-1.

Ответ 5

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

select MAX(Salary) from Employee;

нахождение второй высшей зарплаты

Запрос-1

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

Запрос-2

select MAX(Salary) from Employee
WHERE Salary <> (select MAX(Salary) from Employee )

нахождение n-й самой высокой зарплаты

Запрос-1

SELECT * /*This is the outer query part */
FROM Employee Emp1
WHERE (N-1) = ( /* Subquery starts here */
SELECT COUNT(DISTINCT(Emp2.Salary))
FROM Employee Emp2
WHERE Emp2.Salary > Emp1.Salary)

Запрос-2

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

nth самая высокая заработная плата с использованием ключевого слова TOP в SQL Server

SELECT TOP 1 Salary
FROM (
      SELECT DISTINCT TOP N Salary
      FROM Employee
      ORDER BY Salary DESC
      ) AS Emp
ORDER BY Salary

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

SELECT Salary FROM Employee 
ORDER BY Salary DESC LIMIT n-1,1

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

SELECT Salary FROM Employee 
ORDER BY Salary DESC OFFSET N-1 ROW(S) 
FETCH FIRST ROW ONLY

Найдите n-й самый высокий заработок в Oracle, используя rownum

select * from (
  select Emp.*, 
row_number() over (order by Salary DESC) rownumb 
from Employee Emp
)
where rownumb = n;  /*n is nth highest salary*/

Найдите n-я наивысшая зарплата в Oracle, используя RANK

select * FROM (
select EmployeeID, Salary
,rank() over (order by Salary DESC) ranking
from Employee
)
WHERE ranking = N;

Ответ 6

попробуйте следующее:

select MIN(sal) from salary where sal in 
 (select sal from salary order by sal desc limit 9)

Ответ 7

если вы хотите указать n-й максимум, можете использовать метод ранга.

Чтобы получить третий максимум, используйте

SELECT * FROM
(SELECT @rank := @rank + 1 AS rank, salary
FROM   tbl,(SELECT @rank := 0) r 
order by salary desc ) m
WHERE rank=3

Ответ 8

Попробуйте это для поиска 5-й самой высокой зарплаты -

SELECT DISTINCT(column name) FROM table ORDER BY (column name) desc LIMIT 4,1

для n-й зарплаты -

SELECT DISTINCT(column name) FROM table ORDER BY (column name) desc LIMIT n-1,1

Я пробовал его на панели phpmyadmin..

Ответ 9

SELECT * FROM employe e1 WHERE n-1 = ( SELECT COUNT(DISTINCT(e2.salary)) FROM employe e2 WHERE e2.salary > e1.salary) 

    Where n = highest number of salary like 1,2,3

Ответ 10

Сначала сортировка всех записей, они потребляют много времени (представьте, содержит ли таблица миллионы записей). Однако уловка состоит в том, чтобы улучшить линейный поиск.

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

Здесь, как только внутренний запрос обнаруживает n разных значений зарплаты, превышающих зарплату внешнего запроса, он возвращает результат внешнему запросу.

Mysql ясно упомянули об этой оптимизации на http://dev.mysql.com/doc/refman/5.6/en/limit-optimization.html

Вышеприведенный запрос также может быть записан как

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

Опять же, если запросы так же просто, как просто работать на одной таблице и нужны только для информационных целей, вы можете ограничить самый внешний запрос, чтобы вернуть 1 запись и запустить отдельный запрос, поместив n-й самый высокий уровень зарплаты в where clause

Благодаря решению Абишека Кулкарни, на котором предлагается эта оптимизация.

Ответ 11

select distinct(column_name) from table_name order by column_name desc limit (n-1),1;

Ответ 12

MySQL запрос, чтобы найти N-ую самую высокую зарплату из таблицы зарплат (100% верно)

ВЫБЕРИТЕ Зарплату ОТ СОТРУДНИКА ПО ЗАРЯДУ ОГРАНИЧЕНИЯ DESC LIMIT N-1,1;

Ответ 13

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

где N представляет собой первую зарплату.

Третья высшая зарплата:

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

Ответ 14

Запрос на получение n-й самой высокой записи выглядит следующим образом:

SELECT 
    *
FROM
    (SELECT 
        *
    FROM
        table_name
    ORDER BY column_name ASC
    LIMIT N) AS tbl
ORDER BY column_name DESC
LIMIT 1;

Это просто и легко понять

Ответ 15

За 4-ю высшую зарплату:

выберите минус (зарплата) из (выберите отдельную зарплату от hibernatepractice.employee e order by limit desc limit 4) как e1;

За первую зарплату:

выберите min (зарплата) from (выберите отдельную зарплату от hibernatepractice.employee e order by pc desc limit n) как e1;

Ответ 16

Это будет работать. Чтобы найти 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;

Ответ 17

Таблица зарплат

введите описание изображения здесь

SELECT  amount FROM  salary 
GROUP by amount
ORDER BY  amount DESC 
LIMIT n-1 , 1

Или

SELECT DISTINCT amount
FROM  salary 
ORDER BY  amount DESC 
LIMIT n-1 , 1

Ответ 18

Чтобы получить 2-ую самую высокую зарплату:

SELECT   salary 
FROM     [employees] 
ORDER BY salary DESC 
offset   1 rows 
FETCH next 1 rows only

Чтобы получить N-ую самую высокую зарплату:

SELECT   salary 
FROM     [employees] 
ORDER BY salary DESC 
offset   **n-1** rows 
FETCH next 1 rows only

Ответ 19

SET @cnt=0; 
SELECT s.* 
FROM   (SELECT ( @cnt := @cnt + 1 ) AS rank, 
               a.* 
        FROM   one AS a 
        ORDER  BY a.salary DESC) AS s 
WHERE  s.rank = '3'; 

Ответ 20

set @cnt=0;
select s.* from (SELECT  (@cnt := @cnt + 1) AS rank,a.* FROM one as a  order by a.salary DESC) as s WHERE s.rank='3';

= > это для 3-ей самой высокой зарплаты.  для n-го заменить значение 3. например, 5-й максимум:

set @cnt=0;
select s.* from (SELECT  (@cnt := @cnt + 1) AS rank,a.* FROM one as a  order by a.salary DESC) as s WHERE s.rank='5';

Ответ 21

Попробуйте это решение.

select SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT salary ORDER BY salary DESC),',',3),',',-1) from employees

Ответ 22

Пусть будет таблица salaries содержащая

+----------+--------+--------+
| emp      | salary | deptno |
+----------+--------+--------+
| ep1      |     10 | dp1    |
| ep2      |     20 | dp2    |
| ep3      |     30 | dp2    |
| ep4      |     40 | dp1    |
| ep5      |     50 | dp1    |
| ep6      |     60 | dp3    |
| ep7      |     70 | dp3    |
+----------+--------+--------+

По вложенным запросам: (где вы можете изменить смещение 0/1/2... для первого, второго и третьего... места соответственно)

 select
      *
    from
      salaries as t1 
    where 
      t1.salary = (select 
                   salary
                 from 
                   salaries
                 where 
                 salaries.deptno = t1.deptno ORDER by salary desc limit 1 offset 1);

или может быть путем создания ранга: (где вы можете изменить ранг = 1/2/3... для первого, второго и третьего... места соответственно)

SET @prev_value = NULL;
SET @rank_count = 0;
select * from 
(SELECT
  s.*, 
  CASE 
      WHEN @prev_value = deptno THEN @rank_count := @rank_count + 1
      WHEN @prev_value := deptno THEN @rank_count := 1 
      ELSE @rank_count := 1 
  END as rank
FROM salaries s
ORDER BY deptno, salary desc) as t
having t.rank = 2;

Ответ 23

SELECT Salary FROM table ORDER BY Salary DESC LIMIT n,1

Ответ 24

Здесь мы можем создать функцию MYSQL для этого. nth самая высокая зарплата из таблицы Employee.

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

Например, с учетом приведенной выше таблицы "Сотрудник" n-й наивысший оклад, где n = 2, равен 200. Если n-го наивысшего оклада нет, запрос должен вернуть ноль.

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE limitv INT;
    SET limitv = N - 1;
  RETURN (
      Select IFNULL(
        (select Distinct Salary from Employee order by Salary Desc limit limitv, 1),
         NULL
      ) as getNthHighestSalary
  );
END

Ответ 25

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

Название таблицы: зарплата

select * from salary where salary = 
(select distinct salary from salary order by salary desc limit 2,1)