Похоже, вы на правильном пути - единственное, чего вам не хватает, это ранжировать менеджеров по количеству сотрудников, которые у вас уже есть.Как вы уже догадались, функция rank
может сделать это точно, хотя вы можете предпочесть использовать dense_rank
, если у вас есть связи и вы хотите убедиться, что ряды непрерывны:
SELECT name, cnt, DENSE_RANK() OVER (ORDER BY cnt DESC) AK rank_by_employee_num
FROM (SELECT m.first_name || ' ' || m.last_name as name,
COUNT(e.employee_id) AS cnt
FROM RITDB_employee e
INNER JOIN RITDB_manager m ON e.manager = m.employee_id
GROUP BY m.first_name || ' ' || m.last_name) t
ORDER BY cnt DESC