从多个表中选择count(*)以创建视图

时间:2012-12-16 14:13:09

标签: sql oracle view count

如何从两个不同的表中选择count(*)来创建视图?

有表格:

DEPT表

  • DEPTNO
  • DNAME
  • LOC

EMP表

  • EMPNO
  • ENAME
  • JOB
  • MGR
  • HIREDATE
  • SAL
  • COMM
  • DEPTNO

我试过了:

CREATE VIEW PLACE
AS SELECT d.Loc CITY, count(d.Deptno) N_DEPT, count(e.Empno) N_EMP
   FROM Dept d, Emp e
   where d.Deptno = e.Deptno
   GROUP BY d.Loc, d.deptno;

得到了这个:

CITY          N_DEPT   N_EMP
CHICAGO         6       6
DALLAS          5       5
NEW YORK        3       3

每个城市只有1个N_DEPT,结果是错误的:/。 应该有:

CITY          N_DEPT   N_EMP
CHICAGO         1       6
DALLAS          1       5
NEW YORK        1       3

2 个答案:

答案 0 :(得分:4)

使用DISTINCT,尝试

CREATE VIEW PLACE
AS 
SELECT  d.Loc CITY, 
        count(DISTINCT d.Deptno) N_DEPT, 
        count(e.Empno) N_EMP
FROM    Dept d 
        INNER JOIN Emp e
           ON d.Deptno = e.Deptno
GROUP BY d.Loc

答案 1 :(得分:2)

您也可以简单地计算每个城市想要的东西,而无需加入要计算的表格:

create view PLACE
as
select d.Loc as CITY,
       (select count(distinct deptNo) from dept x where x.DeptNo = d.Deptno) as N_DEPT
       (select count(distinct Empno)  from Emp  e where e.DeptNo = d.Deptno) as N_EMP
from Dept d

这不是一个更好的解决方案。它只是展示了一种不同的方式来查看问题并创建解决方案。 我喜欢它的是你可以以相同的方式添加你想要计算的任何东西,即它引入了一种模板。