2012-06-12 62 views
6

我正在嘗試顯示管理其他員工的每位員工的員工編號與他管理的人數(下表中稱爲emp)。分組時COUNT不正確?

empno ename job   mgr   hiredate sal  comm  deptno 
----- ------ ---------- ---------- ---------- ------- ------- ------ 
7369 Smith Clerk  7902  1980-12-17 800     20 
7499 Allen Salesman 7698  1981-02-20 1600  300  30 
7521 Ward Salesman 7698  1981-02-22 1250  500  30 
7566 Jones Manager  7839  1981-04-02 2975    20 
7654 Martin Salesman 7698  1981-09-28 1250  1400  30 
7698 Blake Manager  7839  1981-05-01 2850    30 
7782 Clark Manager  7839  1981-06-09 2450    10 
7788 Scott Analyst  7566  1982-12-09 3000    20 
7839 King President    1981-11-17 5000    10 
7844 Turner Salesman 7698  1981-09-08 1500  0   30 
7876 Adams Clerk  7788  1983-01-12 1100    20 
7900 James Clerk  7698  1983-12-03 950     30 
7902 Ford Analyst  7566  1983-12-13 3000    20 
7934 Miller Clerk  7782  1982-01-23 1300 

任何想法,我該如何去做這件事?

我已經試過

select empno,count(mgr) from emp group by empno,mgr; 

但這返回:

empno  count(mgr) 
---------- ---------- 
7369  1 
7499  1 
7521  1 
7566  1 
7654  1 
7698  1 
7782  1 
7788  1 
7839  0 
7844  1 
7876  1 
7900  1 
7902  1 
7934  1 

非常感謝您的幫助。

+1

能否請您詳細闡述更多? – TechGuy

+1

你想讓你的輸出看起來像什麼?輸出示例? –

+1

@methuselah在原始文章中加入一個小結果片段和解釋:*結果在這裏非常重要*並且將爲更好的問題提供所有有關信息:)這也展示了'count(n)'和'COUNT(*)';有一個適當的標題/問題很容易重定向到重複/解決方案。 (向下投票只需要暫時的。) – 2012-06-12 18:03:10

回答

4

select count(*) from employee_table group by mgr

3

我會通過mgr actualy組,那麼你就必須每個經理組,可以做一個計數,看看有多少人是經理管理。然後,您可以在桌上進行自我加入以獲取該經理的信息。例如:

SELECT E1.Mgr, E2.ename, Count(*) as Number FROM Employees E1 
INNER JOIN Employees E2 ON E1.mgr = E2.empno 
GROUP BY E1.Mgr 

雖然我沒有測試過這個。

+0

你爲什麼加入e1.empno = e2.empno? – Gratzy

+0

對不起,錯字 - 我的意思是'E1.mgr = E2.empno' –

1

您可以嘗試以下不使用連接:

select mgr, count(eno) 
    from employee 
group by mgr 

select name, e1.mgr, count(e1.eno) 
    from employee e1 
group by rollup (e1.mgr, name)