我正在尝试显示管理其他员工的每位员工的员工编号,其中包含他或她管理的人数,下面的表格为 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
非常感谢你的帮助。
答案 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)