分组时COUNT是不正确的?

时间:2012-06-12 17:58:06

标签: sql group-by

我正在尝试显示管理其他员工的每位员工的员工编号,其中包含他或她管理的人数,下面的表格为 emp

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

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:4)

select count(*) from employee_table group by mgr

答案 1 :(得分:3)

我会按mgr进行分组,然后你会为每个经理组成一个小组,并且可以只计算经理管理的人数。然后,您可以在桌面上进行自我加入以获取该经理的信息。类似的东西:

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

虽然我没有测试过这个。

答案 2 :(得分:1)

您可以尝试不使用join的那些:

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)