sushedel baghel Ответов: 3

Найдите вторую по величине зарплату с именем


у меня есть две таблицы, одна из которых-сотрудник, у которого есть два столбца id, имя и вторая таблица зарплаты имеют идентификатор,зарплату,обозначение. Как найти вторую по величине зарплату с именем

Что я уже пробовал:

я пытаюсь внутренне присоединиться к предложению where, но не получаю соответствующего результата

Maciej Los

Что такое имя и версия базы данных?
[РЕДАКТИРОВАТЬ]
А что вы пробовали? Покажи нам свою попытку.

3 Ответов

Рейтинг:
1

OriginalGriff

Во - первых, напишите запрос, чтобы получить самую высокую зарплату с его идентификатором:

SELECT TOP 1 Id, Salary FROM 
   (SELECT TOP 2 Salary, Id FROM Salary ORDER BY Salary DESC) AS m 
ORDER BY Salary ASC

Затем соедините это с другой таблицей, чтобы подобрать название.


Maciej Los

5ed!

CPallini

5.

Рейтинг:
1

CPallini

Внутреннее соединение-это путь, по которому нужно идти. Sqlite пример:

BEGIN TRANSACTION;

CREATE TABLE EMP(Id integer PRIMARY KEY, Name text);
CREATE TABLE SAL(EmpId integer, SALARY Integer);

INSERT INTO EMP VALUES(1,'Foo');
INSERT INTO EMP VALUES(2,'Boo');
INSERT INTO EMP VALUES(3,'Goo');

INSERT INTO SAL VALUES(1, 10000);
INSERT INTO SAL VALUES(2, 7000);
INSERT INTO SAL VALUES(3, 9000);

COMMIT;

SELECT EMP.Name, SAL.SALARY FROM EMP JOIN SAL ON EMP.Id=SAL.EmpId ORDER BY SAL.SALARY LIMIT 1 OFFSET 1;


Maciej Los

5ed!

Рейтинг:
0

Maciej Los

Для MS SQL Server вы можете использовать Функции ранжирования (Transact-SQL) | Microsoft Docs[^], особенно: ROW_NUMBER (Transact-SQL) | Microsoft Docs[^]

SELECT t.*
FROM (
    SELECT e.name, s.salary, ROW_NUMBER() OVER(ORDER BY salary DESC) AS rn
    FROM employee AS e INNER JOIN salary AS s ON e.ID = s.empID
) AS t
WHERE t.rn=2


Смотрите прошлый ответ: Как получить имена сотрудников вместе с названиями отделов, которые имеют самую высокую зарплату в соответствующих отделах.[^]


CPallini

5.

Maciej Los

Спасибо, Карло.