【问题标题】:Select count(*) from multiple tables to create view从多个表中选择 count(*) 以创建视图
【发布时间】:2012-12-03 20:05:28
【问题描述】:

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

有桌子:

部门表

  • DEPTNO
  • DNAME
  • 定位

EMP 表

  • EMPNO
  • 姓名
  • 工作
  • 经理
  • 聘用日期
  • SAL
  • 通讯
  • 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

【问题讨论】:

    标签: sql oracle view count


    【解决方案1】:

    使用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
    

    【讨论】:

    • 谢谢,它有效:)。我对“视图”禁止“不同”的讲座感到困惑:/但这取决于我看到的数据库。再次感谢!
    【解决方案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
    

    这并不是一个更好的解决方案。它只是展示了一种看待问题并创建解决方案的不同方式。 我喜欢它的地方在于,您可以以相同的方式添加任何您想计算的内容,即它引入了一种模板。

    【讨论】:

    • 这是一个有趣而聪明的解决方案,但我得到了 Message-Log ORA-01427: single-row subquery returns more than one row :/
    • 对不起,我的查询中有一个愚蠢的错误。它应该是(select count(distinct ...)。感谢您向我展示错误。我更新了我的提案。
    猜你喜欢
    • 2010-10-11
    • 2011-10-06
    • 1970-01-01
    • 2013-02-02
    • 2010-09-07
    • 1970-01-01
    • 2015-07-02
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多