SQL-запрос для получения количества работников на отдел в порядке убывания

Вот SQL-запрос для получения количества работников для каждого отдела в порядке убывания:

SELECT department, COUNT(*) AS worker_count
FROM workers
GROUP BY department
ORDER BY worker_count DESC;

В этом запросе предполагается, что у вас есть таблица с именем «работники» со столбцами для «отдела» и другой соответствующей информацией о работниках.

Вот несколько альтернативных методов достижения того же результата:

Метод 1. Использование подзапроса

SELECT department, worker_count
FROM (
    SELECT department, COUNT(*) AS worker_count
    FROM workers
    GROUP BY department
) AS subquery
ORDER BY worker_count DESC;

Метод 2: использование общего табличного выражения (CTE)

WITH worker_counts AS (
    SELECT department, COUNT(*) AS worker_count
    FROM workers
    GROUP BY department
)
SELECT department, worker_count
FROM worker_counts
ORDER BY worker_count DESC;

Метод 3. Использование оконной функции

SELECT department, worker_count
FROM (
    SELECT department, COUNT(*) AS worker_count, 
           ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS row_num
    FROM workers
    GROUP BY department
) AS subquery
ORDER BY row_num;