Top N rows per group
SQL
-- Works on PostgreSQL, MySQL 8+, SQLite 3.25+ and SQL Server.
WITH ranked AS (
SELECT
employee_id,
department_id,
salary,
ROW_NUMBER() OVER (
PARTITION BY department_id
ORDER BY salary DESC, employee_id
) AS rn
FROM employees
)
SELECT employee_id, department_id, salary
FROM ranked
WHERE rn <= 3
ORDER BY department_id, rn;