2012-07-02 94 views
6

我對SQL有一個看起來很簡單的問題,那就是我無法解決問題。假設我有如下表:帶有WHERE子句的SQL COUNT

company: 
    company_id 
    company_title 

users: 
    user_id 
    username 

company_owners: 
    company_id 
    user_id 

現在,可以有多個用戶作爲公司的所有者。下面是一些示例數據:

company: 
1, "A Company" 
2, "B Company" 
3, "C Company" 

users: 
1, "A User" 
2, "B User" 
3, "C User" 

company_owners: 
1,1 
1,2 
1,3 
2,3 

我想創建一個查詢(MySQL的)那得到了COMPANY_TITLE,以及業主該公司的數量,基於特定公司的老闆。因此,舉例來說:

例子查詢(英文)運行:Get業主的數量每個公司, 「C用戶」 是的主人:

company_id=1, company_title="A Company", num_owners=3 
company_id=2, company_title="B Company", num_owners=1 
company_id=3, company_title="C Company", num_owners=0 

我曾嘗試:

SELECT COUNT(user_id), company.* FROM `company` 
LEFT JOIN `company_owners` ON company_owners.company_id = company.company_id 
WHERE company_owners.user_id=1 GROUP BY company_id 

但是,總是給我一個「1」的所有權號,我假設它是因爲它只計算了user_id = 1的行。

有沒有人有任何想法?如果需要,我可以提供更多細節。

非常感謝!

+0

什麼是'course_id'? –

+0

對不起,這是一個錯誤的 – Chris

回答

7

您的WHERE子句應該是「哪裏存在user_id = 1的該公司的所有者」。

SELECT COUNT(user_id), company.* 
FROM `company` 
LEFT JOIN `company_owners` 
ON company_owners.company_id = company.company_id 
WHERE EXISTS 
(
    SELECT * 
    FROM company_owners AS co2 
    WHERE company_owners.company_id = co2.company_id 
    AND co2.user_id = 3 
) 
GROUP BY company_id 

看到它聯機工作:sqlfiddle

+0

這很好。我將如何改變它,以便我還可以獲得擁有0個所有者的所有公司?這隻返回具有多於0個所有者的行。 – Chris

+0

@Chris:它不會歸還沒有所有者的公司,因爲沒有所有者的公司不能歸屬「C」。 –

+0

這是一個令人難以置信的好點,我想的是完全不同的東西!哈哈,對不起。非常感謝您的快速回答! – Chris

1
select company.company_id, company_title, count(*) 
from company join company_owners on company.company_id = company_owners.company_id 
where exists (select 1 from company_owners co where co.user_id = 1 and co.company_id = company.company_id) 
group by company.company_id, company_title