кто-нибудь поможет мне узнать n-я наивысшая зарплата из таблицы зарплаты в MYSQL
SQL-запрос, чтобы найти N-й наивысший заработок из таблицы зарплат
Ответ 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)