带有WHERE子句的SQL COUNT

Chr*_*ris 6 mysql sql select left-join

我有一个似乎很简单的SQL问题,我无法搞清楚.假设我有以下表格:

company: 
    company_id
    company_title

users: 
    user_id
    username

company_owners: 
    company_id
    user_id
Run Code Online (Sandbox Code Playgroud)

现在,可以有多个用户作为公司所有者.以下是一些示例数据:

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个查询(MySQL),它根据特定的公司所有者获取company_title以及该公司的所有者数量.所以,例如:

示例查询(英文)run:获取"C User"所有者的每个公司的所有者数量:

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
Run Code Online (Sandbox Code Playgroud)

我试过了:

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
Run Code Online (Sandbox Code Playgroud)

但这总是给我一个"1"的所有权数字,我假设因为它只计算user_id = 1的行.

有没有人有任何想法?如果需要,我可以提供更多细节.

非常感谢!

Mar*_*ers 8

您的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
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:sqlfiddle