我遇到了这个问题,如果有人可以帮我解决这个问题会很棒。我有两个表,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
我确信这是一个严重的错误。 :-)有人可以告诉我这样做的正确方法吗?感谢。
答案 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 ;