如何从两个不同的表中选择count(*)来创建视图?
有表格:
DEPT表
EMP表
我试过了:
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
答案 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
这不是一个更好的解决方案。它只是展示了一种不同的方式来查看问题并创建解决方案。 我喜欢它的是你可以以相同的方式添加你想要计算的任何东西,即它引入了一种模板。