希望通过连接3个表在sql中使用count函数
我想回答这个问题: 打印由不同部门和项目经理控制的项目总数 我使用下面的查询希望通过连接3个表在sql中使用count函数,sql,oracle,Sql,Oracle,我想回答这个问题: 打印由不同部门和项目经理控制的项目总数 我使用下面的查询 select a.dname as "Departement", b.fname as "Manager", c.pname as "Project" , c.dnum from "DEPARTMENT " a , "EMPLOYEE " b , "PROJECT " c where a.dnumber = c.dnum and a.mgr_ssn = b.ssn ; 我只想添加count函数
select a.dname as "Departement", b.fname as "Manager", c.pname as "Project" , c.dnum
from "DEPARTMENT " a ,
"EMPLOYEE " b ,
"PROJECT " c
where a.dnumber = c.dnum
and a.mgr_ssn = b.ssn ;
我只想添加count函数来返回每个经理控制的项目数 首先,这不是连接表的方式,至少从90年代初开始是这样 然后,您希望每个部门和经理都有一行,而不管他们关联了多少个项目;这意味着您需要按这两个字段分组。另一个信息是项目行的聚合,正如您所说,您需要的聚合是计数 您的最终查询应该如下所示
select a.dname as "Departement",
b.fname as "Manager",
count(distinct c.pname) as "ProjectsCount"
from DEPARTMENT a
join EMPLOYEE b
on a.mgr_ssn = b.ssn
join PROJECT c
on a.dnumber = c.dnum
group by a.dname, b.fname
前面的答案和这个答案都假设没有两个项目具有相同的名称-项目表上是否有唯一的键
select a.dname as Departement,
b.fname as Manager,
c.pname as Project,
c.dnum,
count(distinct d.pname)
from DEPARTMENT a,
EMPLOYEE b,
PROJECT c,
PROJECT d
where a.dnumber = c.dnum
and a.mgr_ssn = b.ssn
and a.dnumber = d.dnum
group by a.dname,
b.fname,
c.pname,
c.dnum;
这是你的问题
select a.dname as Department, b.fname as Manager, count(c.pname) as Project, c.dnum
from DEPARTMENT a
join EMPLOYEE b on a.mgr_ssn = b.ssn
join PROJECT c on a.dnumber = c.dnum
group by a.dname,b.fname,c.dnum
提示:当你阅读总数,计数将涉及,也可能由一组。谁教你加入那样应该考虑放弃…显式连接是当今的标准提示:切换到现代的显式连接语法。更易于编写,无错误,更易于阅读和维护,并且在需要时更易于转换为外部联接。如果需要此功能,请选择a.dname作为部门,b.fname作为经理,c.pname作为项目,c.dnum从部门a加入员工b在b.ssn=a.mgr\u ssn加入项目c在c.dnum=a.dnumber;sql99称之为有效,这也是许多DBA(包括我自己)仍然是如何连接表的,尽管我担心表名中的隐含空格。不客气,很高兴它有帮助@布莱恩纽曼你为什么使用这种连接?我只看到这方面的缺点……在SQL 2016中,旧的隐式连接仍然有效,但这不是使用它的借口。在这种情况下,我真的考虑从整个查询中删除双引号。旧习惯…我花了好几年的时间才转向现代、明确的加入,但现在我再也不会回去了!