Sql 检查一名员工管理多少人

Sql 检查一名员工管理多少人,sql,Sql,我被要求制作一个名为SupervisorStaff的新表格,其中显示了一列staffID和另一列该职员目前管理的职员数量。我已经有了一个名为staff的表,其中有staffID和SupervisorID等列,所以我计划使用其中存储的信息创建新表。监督员id是监督他们的工作人员的id。例如,id为-3的工作人员可以有一个SupervorID-5,这意味着5号工作人员就是监督他们的人。我想做的是计算每个员工的主管ID,以显示每个员工主管的员工总数。我这样做: CREATE VIEW Supervis

我被要求制作一个名为SupervisorStaff的新表格,其中显示了一列staffID和另一列该职员目前管理的职员数量。我已经有了一个名为staff的表,其中有staffID和SupervisorID等列,所以我计划使用其中存储的信息创建新表。监督员id是监督他们的工作人员的id。例如,id为-3的工作人员可以有一个SupervorID-5,这意味着5号工作人员就是监督他们的人。我想做的是计算每个员工的主管ID,以显示每个员工主管的员工总数。我这样做:

CREATE VIEW SupervisorStaff AS
    SELECT Staff.StaffID, COUNT(Staff.SupervisorID) AS "No. of staff supervised"
    FROM Staff
    GROUP BY (Staff.SupervisorID)
    ORDER BY (Staff.StaffID)
然而,这是行不通的。我对数据库还很陌生,所以我真的不知道哪里出了问题,也不知道从这里该往哪里走

我希望最终结果如下所示:

select
supervisorid as 'Supervisor', count(staffid) as 'Nr of people supervised'
from staff
group by supervisorid
order by supervisorid
员工身份证 受监管员工人数 1. 4. 2. 1.
所以你想看看每个人管理多少人

使用group by时,您处于正确的轨道上,但您的select值应包含:

  • 组中使用的值由
  • 集合,如计数
大概是这样的:

select
supervisorid as 'Supervisor', count(staffid) as 'Nr of people supervised'
from staff
group by supervisorid
order by supervisorid

如果这是您的员工表:

CREATE TABLE STAFF(NAME varchar(20), ID int, SUPERVISOR_ID int);
INSERT INTO STAFF VALUES('Jon',1,5);
INSERT INTO STAFF VALUES('Rachel',2,5);
INSERT INTO STAFF VALUES('Richard',3,1);
然后,这是获取您要查找的结果的查询:

SELECT SUPERVISOR_ID, COUNT(*) AS NO_STAFF_SUPERVISED 
FROM STAFF 
GROUP BY SUPERVISOR_ID;

(1) 提供样本数据和预期结果。(2) 标记您正在使用的数据库。(3) 一般来说,视图定义中不允许或忽略
ORDER BY
。如果您的意思是“计算具有主管ID=此员工ID的其他行数”,则您必须将其写入,可能作为子查询,但联接也可以。“count(staff.supervisorID)”是不够的,而且我不认为分组方式也不是你想要的。你的结果应该只报告直接下属还是所有向主管报告的人。仅供参考,我真的不会将此创建为需要定期更新的新表。也许用一个视图来代替。天哪,谢谢!那真有魅力!我没意识到这个网站的反应如此之快,哈哈