在OracleDB中加入时两个表中的出现次数

时间:2014-03-25 18:06:41

标签: sql oracle join count oracle11g

我遇到了这个问题,如果有人可以帮我解决这个问题会很棒。我有两个表,AllMethods和RegisteredMethods。 AllMethods具有所有项目的总方法列表。 RegisteredMethods表具有已注册的所有项目的方法列表。表格结构如下。

AllMethods结构

Project_Name || Method names || Project_URL  
US_Project      method1         some_URL
US_Project      method2         some_Url 
US_Project      method3         some_url
Asia_project    method1         some_Url
Asia_project    method2         some_url

RegisteredMethods Structure

Project_Name || Method names || Project_URL
US_Project      method2         some_Url
Asia_Project    method1         some_Url
Asia_Project    method2         some_Url

现在我想获得两个表中所有项目的方法计数,以便我可以将已注册的方法与总方法进行比较。我想在一个查询中执行此操作。我正在看的结果是这样的。

Project_Name || Total_Methods || Registered_Methods
US_Project          3                  1
Asia_project        2                  2     

我尝试使用以下查询执行此操作:

select count(AllMethods.Project_Name), count(RegisteredMethods.Project_Name),AllMethods.Project_Name from 
AllMethods,RegisteredMethods where AllMethods.Project_Name=RegisteredMethods.Project_Name group by AllMethods.Project_Name

我确信这是一个严重的错误。 :-)有人可以告诉我这样做的正确方法吗?感谢。

2 个答案:

答案 0 :(得分:0)

这样的事情应该这样做:

select a.project_name,
       count(*) total_methods,
       count(r.method_name) registered_methods
  from all_methods a,
       registered_methods r
 where a.project_name = r.project_name(+) 
   and a.method_name = r.method_name(+)
 group by a.project_name;

答案 1 :(得分:0)

在进行连接之前,您需要进行聚合。否则,您将获得每个Project_Name的笛卡尔积:

select am.ProjectName, am.cnt as AllCnt, coalesce(rm.cnt, 0) as RegisterdCnt
from (select ProjectName, count(*) as cnt
      from AllMethods
      group by ProjectName
     ) am left  outer join
     (select ProjectName, count(*) as cnt
      from RegisteredMethods
      group by ProjectName
     ) rm
     on am.Project_Name = rm.Project_Name ;