2015-12-06 138 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

相關問題