如何计算在1列中具有相同值的行数

时间:2015-12-06 20:07:22

标签: sql

EMPLOYEE

这是我的桌子。如何计算具有相同工作的ENAME的数量?

看着桌子,我可以看到答案是13,但我该怎么算呢?

SELECT COUNT(ename)
FROM emp
GROUP by job

上面的SQL语句不是我要查找的代码:))

1 个答案:

答案 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)上的索引,这可能是最快的方法。