Запрос: имя dept с наибольшим числом emp, ошибка: Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос - PullRequest
1 голос
/ 03 мая 2020

Укажите название отдела, в котором работает наибольшее число emp

Таблица

emp_id   dname
1        D1
2        D2
3        D1
4        D2
5        D2
6        D3
7        D2

Запрос

select dname from emp_demo e1 having 
count(emp_id) = 
(select max(count(emp_id)) from emp_demo e2 
 group by dname )

Ошибка

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

Ожидаемый результат

В D1 работает 2 сотрудника, в D2 4 сотрудника, а в D3 1 сотрудник Это. Таким образом, мы должны получить номер отдела D2, так как в нем максимальное количество сотрудников.

Ответы [ 4 ]

1 голос
/ 03 мая 2020

Вы можете использовать функцию count() следующим образом.

; WITH cte
AS (
    SELECT dname
        ,count(emp_id) AS TotEmpCount
    FROM EmpDept
    GROUP BY dname
    )
SELECT TOP 1 *
FROM cte
ORDER BY TotEmpCount DESC

enter image description here

Live db <> fiddle демо.

1 голос
/ 03 мая 2020

Вы можете использовать оконную функцию:

select dname
from (select dname, dense_rank() over (order by count(*) desc) as seq
      from table t
      group by dname
     ) t
where seq = 1;

DENSE_RANK() вернет одну или несколько глубин, имеющих наивысшую оценку no_of_employee.

1 голос
/ 03 мая 2020

Просто используйте top (1) и group by:

select top (1) dname
from emp_demo
group by dname
order by count(*) desc;
0 голосов
/ 03 мая 2020


Привет, Шайлая,

Вы можете использовать ниже простой запрос.

select dname, max(count(1)) from emp_demo
group by dname;

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...