Sql 查找超过EMP平均数量的部门
列出超过EMP平均数量工作的部门名称 表emp_演示 D1中有2名员工,D2中有3名员工,D3中有1名员工 平均员工人数为2+3+1/3=2名员工 因此,这里的员工数超过平均数的部门将是D2,有3名员工 我的查询代码: 错误 无法对包含聚合或子查询的表达式执行聚合函数Sql 查找超过EMP平均数量的部门,sql,sql-server,Sql,Sql Server,列出超过EMP平均数量工作的部门名称 表emp_演示 D1中有2名员工,D2中有3名员工,D3中有1名员工 平均员工人数为2+3+1/3=2名员工 因此,这里的员工数超过平均数的部门将是D2,有3名员工 我的查询代码: 错误 无法对包含聚合或子查询的表达式执行聚合函数 首先,使用一个变量计算emp_id的平均数量。这有一个子查询,它计算每个dname的计数,然后主查询在此基础上运行一个平均值 查询的第二部分是一个仅提供信息的行,告诉您它计算出的平均值。如果你不想要,就不需要了 第三部分再次运行计
首先,使用一个变量计算emp_id的平均数量。这有一个子查询,它计算每个dname的计数,然后主查询在此基础上运行一个平均值 查询的第二部分是一个仅提供信息的行,告诉您它计算出的平均值。如果你不想要,就不需要了 第三部分再次运行计数,但过滤掉不大于开始时计算的@avg_emps变量的dname条目:
declare @avg_emps int = (
select
avg(emp_count) as avg_emp_count
from (
select
dname
,count(emp_id) as emp_count
from dbo.foo
group by dname
) as count_emps
)
select 'Average employees per department is: ' + cast(@avg_emps as varchar(10));
select
dname
from dbo.foo
group by dname
having count(emp_id) > @avg_emps;
首先,使用一个变量计算emp_id的平均数量。这有一个子查询,它计算每个dname的计数,然后主查询在此基础上运行一个平均值 查询的第二部分是一个仅提供信息的行,告诉您它计算出的平均值。如果你不想要,就不需要了 第三部分再次运行计数,但过滤掉不大于开始时计算的@avg_emps变量的dname条目:
declare @avg_emps int = (
select
avg(emp_count) as avg_emp_count
from (
select
dname
,count(emp_id) as emp_count
from dbo.foo
group by dname
) as count_emps
)
select 'Average employees per department is: ' + cast(@avg_emps as varchar(10));
select
dname
from dbo.foo
group by dname
having count(emp_id) > @avg_emps;
该错误是由SQL Server不允许聚合函数包含另一个聚合函数引起的 可以尝试将CTE与子查询联接一起使用的一种方法
该错误是由SQL Server不允许聚合函数包含另一个聚合函数引起的 可以尝试将CTE与子查询联接一起使用的一种方法
使用CTE返回每个部门的平均员工人数:
with cte as (
select dname, count(*) counter
from emp_demo
)
select dname
from cte
where counter > (select avg(counter) from cte)
使用CTE返回每个部门的平均员工人数:
with cte as (
select dname, count(*) counter
from emp_demo
)
select dname
from cte
where counter > (select avg(counter) from cte)
这应在不使用任何变量的情况下工作:
SELECT *
FROM emp_demo
GROUP by dname
HAVING count(emp_id) > (
SELECT AVG(r1.c1)
from (
SELECT count(emp_id)) as c1
FROM emp_demo
GROUP by dname
) as r1
)
这应在不使用任何变量的情况下工作:
SELECT *
FROM emp_demo
GROUP by dname
HAVING count(emp_id) > (
SELECT AVG(r1.c1)
from (
SELECT count(emp_id)) as c1
FROM emp_demo
GROUP by dname
) as r1
)
AVGcountemp_id不是有效的sql表达式。回显@forpas时,该问题甚至将此语法描述为与错误一起不起作用!AVGcountemp_id不是有效的sql表达式。回显@forpas时,该问题甚至将此语法描述为与错误一起不起作用!