Reputation: 579
I have a problem that I need to select all owners who have 2 different companies where each company is on 2 different projects.
For example :
owner company project
1 company1 project1
1 company1 project2
1 company2 project2
1 company2 project3
1 company2 project1
2 company1 project1
2 company2 project1
2 company3 project1
2 company3 project2
3 company2 project2
3 company1 project1
I tried to do like this :
select owner from table
group by owner
having count(distinct company)>1 and count(distinct project)>1
But it did not work.
How to use a SQL query to solve this problem? For this case above, the query is expected to return:
1
Upvotes: 0
Views: 54
Reputation: 1269633
I have a problem that I need to select all owners who have 2 different companies where each company is on 2 different projects.
Use two levels of aggregation:
select owner
from (select owner, company, count(*) as num_projects
from t
group by owner, company
) t
where num_projects = 2
group by owner
having count(*) = 2;
This assumes that owner/company/projects are not duplicated. If that is possible, use count(distinct project)
in the subquery.
Note: If you mean owners that have at least two companies with at least two projects, then you would tweak this to:
select owner
from (select owner, company, count(*) as num_projects
from t
group by owner, company
) t
where num_projects >= 2
group by owner
having count(*) >= 2;
Upvotes: 3