2015-12-06 146 views
0

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

这是我的表格。我如何统计具有相同工作的ENAME的数量?

看着桌子我可以看到答案是13,但我该如何计算它?

SELECT COUNT(ename) 
FROM emp 
GROUP by job 

上面这个SQL语句是不是我找的:)代码)


+0

你想要的人数公关。工作,还是其他人拥有工作的人数? – bolav

回答

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)的指数,这可能是最快的方法。

+0

我会调整第一个选项,以便通过emp.job HAVING COUNT(*)> 1在子查询组中使用HAVING语句。这会消除主查询中对大小写的需求。 – Luc

+0

谢谢你:)现在我明白了 – LouisTR

相关问题