2

2つの異なるテーブルからcount(*)を選択して、ビューを作成するにはどうすればよいですか?

テーブルがあります:

DEPTテーブル

  • DEPTNO
  • DNAME
  • LOC

EMPテーブル

  • EMPNO
  • ENAME
  • 仕事
  • MGR
  • 雇用日
  • 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

各都市にはN_DEPTが1つしかないため、結果は間違っています:/。あるべきです:

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

2 に答える 2

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
于 2012-12-16T14:18:43.443 に答える
3

カウントするテーブルを結合せずに、都市ごとに必要なものを単純にカウントすることもできます。

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

これは、より良い解決策であるとは言えません。問題を見て解決策を作成する別の方法を示しているだけです。私が気に入っているのは、数えたいものを同じ方法で追加できることです。つまり、一種のテンプレートが導入されています。

于 2012-12-16T14:31:11.727 に答える