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;