Сначала попробуйте сами: на собеседовании подсказки не будет.
Две оконные функции в одном SELECT с одинаковым PARTITION BY department_id: avg(salary) без ORDER BY даёт среднее по всему отделу в каждой строке, rank() с ORDER BY salary даёт ранг от меньшей зарплаты.
round(..., 2) поверх avg: среднее от int в PostgreSQL уже numeric, округление сработает. При равных зарплатах rank() даёт одинаковый ранг и пропуск следующего, dense_rank() пропуска бы не делал.
SELECT fio, department_id, salary, round(avg(salary) OVER (PARTITION BY department_id), 2) AS avg_salary, rank() OVER (PARTITION BY department_id ORDER BY salary) AS rnk FROM employees