Вторая по величине зарплата
Контекст
В «Пульсе» — внутренней HR-системе компании — начался пересмотр окладов. Финансы просят точку опоры: какая в компании вторая по величине зарплата. Вопрос кажется простым ровно до момента, когда выясняется, что верхний оклад получают двое.
Задача
Верните вторую по величине зарплату среди действующих сотрудников — одно число в колонке second_salary.
Данные
Таблица employees — сотрудники:
| колонка | тип | что хранит |
|---|---|---|
id | int | номер сотрудника |
name | text | имя |
department_id | int | номер отдела |
manager_id | int | номер руководителя, NULL у директора |
job_title | text | должность |
salary | int | оклад в рублях, NULL если ещё не назначен |
hired_at | date | дата найма |
left_at | date | дата ухода, NULL у действующих |
Примерные строки:
| id | name | job_title | salary | hired_at | left_at |
|---|---|---|---|---|---|
| 1 | Артём Кузнецов | директор | 480000 | 2023-02-01 | NULL |
| 2 | Марина Лебедева | руководитель разработки | 480000 | 2023-04-10 | NULL |
| 22 | Слава Дёмин | стажёр | NULL | 2026-06-15 | NULL |
| 23 | Кирилл Ким | архитектор | 490000 | 2023-06-01 | 2026-05-31 |
Правила
- Ровно одна строка и одна колонка —
second_salary. - Считаем только действующих:
left_at IS NULL. - «Вторая по величине» — следующий по величине уровень оклада, а не второй сотрудник в отсортированном списке. Если максимум получают двое, оба остаются на первом уровне.
- Сотрудники без оклада (
salary IS NULL) в расчёт не идут. - Если второго уровня нет — все получают поровну или действующий сотрудник один — верните NULL (особое значение «данных нет»: не ноль и не пустая строка).
Примеры
-- Оклады 500000, 500000, 300000:
-- second_salary
-- 300000
-- Оклады 400000, 400000:
-- second_salary
-- NULL
Где это пригодится
Вопрос про вторую по величине — входной фильтр на собеседовании: он проверяет, различает ли кандидат номер строки и уровень значения. Тот же приём достаёт вторую по обороту площадку и предпоследнюю ступень тарифной сетки.
Данные для локальной проверки
Каждый набор запускается в отдельной базе. Здесь показаны точные данные, на которых проверяется запрос.
Строки результата могут идти в любом порядке.
Набор 1: данные и ожидаемый результат
Таблицы и данные
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
department_id INTEGER NOT NULL,
manager_id INTEGER,
job_title TEXT NOT NULL,
salary INTEGER,
hired_at DATE NOT NULL,
left_at DATE
);
INSERT INTO employees
(id, name, department_id, manager_id, job_title, salary, hired_at, left_at)
VALUES
(1, 'Алексей', 1, NULL, 'Директор', 500000, DATE '2023-01-01', NULL),
(2, 'Белла', 1, NULL, 'Архитектор', 500000, DATE '2023-02-01', NULL),
(3, 'Кирилл', 2, NULL, 'Разработчик', 320000, DATE '2024-01-01', NULL),
(4, 'Дарья', 2, NULL, 'Аналитик', 200000, DATE '2024-02-01', NULL),
(5, 'Елена', 2, NULL, 'Консультант', 900000, DATE '2022-01-01', DATE '2025-12-31'),
(6, 'Фёдор', 3, NULL, 'Стажёр', NULL, DATE '2026-01-01', NULL); | second_salary |
|---|
| 320000 |
Набор 2: данные и ожидаемый результат
Таблицы и данные
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
department_id INTEGER NOT NULL,
manager_id INTEGER,
job_title TEXT NOT NULL,
salary INTEGER,
hired_at DATE NOT NULL,
left_at DATE
);
INSERT INTO employees
(id, name, department_id, manager_id, job_title, salary, hired_at, left_at)
VALUES
(1, 'Алексей', 1, NULL, 'Директор', 400000, DATE '2023-01-01', NULL),
(2, 'Белла', 1, NULL, 'Архитектор', 400000, DATE '2023-02-01', NULL),
(3, 'Кирилл', 2, NULL, 'Стажёр', NULL, DATE '2026-01-01', NULL),
(4, 'Дарья', 2, NULL, 'Консультант', 900000, DATE '2022-01-01', DATE '2025-12-31'); | second_salary |
|---|
| NULL |