2012-06-12 28 views
6

Tôi đang cố gắng để hiển thị số nhân viên của từng nhân viên quản lý nhân viên khác với số người mà họ quản lý với bảng bên dưới được gọi là emp.COUNT không chính xác khi nhóm?

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 

Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này?

Tôi đã thử

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

nhưng điều này trả về:

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 

Cảm ơn rất nhiều sự giúp đỡ của bạn.

+1

Bạn có thể xin hãy giải thích hơn? – TechGuy

+1

Bạn muốn sản phẩm của mình trông như thế nào? Ví dụ đầu ra? –

+1

@methuselah Đặt nó lên trong bài viết gốc với một đoạn kết quả nhỏ và giải thích: * kết quả là quan trọng ở đây * và wil tạo một câu hỏi hay hơn về :) Điều này cũng cho thấy sự khác biệt giữa 'count (n)' và 'count (*)'; với một tiêu đề/câu hỏi thích hợp, rất dễ chuyển hướng đến các bản sao/giải pháp. (Phiếu bầu chỉ cần tạm thời.) –

Trả lời

4

select count(*) from employee_table group by mgr

3

tôi sẽ actualy nhóm bởi mgr, sau đó bạn sẽ có một nhóm mỗi người quản lý và có thể chỉ đếm xem có bao nhiêu người mà giám đốc quản lý. Sau đó, bạn có thể tự tham gia trên bàn để nhận thông tin của người quản lý đó. Một cái gì đó như:

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

Mặc dù tôi chưa thử nghiệm điều này.

+0

tại sao bạn tham gia e1.empno = e2.empno? – Gratzy

+0

Xin lỗi, lỗi chính tả - Tôi có nghĩa là 'E1.mgr = E2.empno' –

1

Bạn có thể thử những điều đó không sử dụng tham gia:

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

hoặc

select name, e1.mgr, count(e1.eno) 
    from employee e1 
group by rollup (e1.mgr, name) 
Các vấn đề liên quan