这是我的桌子。如何计算具有相同工作的ENAME
的数量?
看着桌子,我可以看到答案是13,但我该怎么算呢?
SELECT COUNT(ename)
FROM emp
GROUP by job
上面的SQL语句不是我要查找的代码:))
答案 0 :(得分:0)
拥有相同工作的员工人数。一种方法是聚合方法的聚合。如果我们计算每个工作的员工数量,那么总和就是这个数字大于1的次数:
select sum(case when cnt > 1 then cnt else 0 end)
from (select emp.job, count(*) as cnt
from emp
group by emp.job
) j;
这也可以写成:
select sum(ccnt)
from (select emp.job, count(*) as cnt
from emp
group by emp.job
having count(*) > 1
) j;
有一种join
方法。但也许更容易思考的方法是使用exists
而不是join
:
select count(*)
from emp e
where exists (select 1
from emp e2
where e2.job = e.job and e2.empno <> e.empno
);
使用emp(job, empno)
上的索引,这可能是最快的方法。