【问题标题】:SQL COUNT with WHERE clause带有 WHERE 子句的 SQL COUNT
【发布时间】:2012-07-03 09:01:52
【问题描述】:

我有一个关于 SQL 的看似简单的问题,但我无法弄清楚。假设我有以下表格:

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 以及该公司的所有者数量。所以,例如:

示例查询(英文)运行:获取“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 的行。

有人有什么想法吗?如果需要,我可以提供更多细节。

非常感谢!

【问题讨论】:

    标签: mysql sql select left-join


    【解决方案1】:

    您的 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 个的行。
    • @Chris:它不会返回没有所有者的公司,因为没有所有者的公司不能归“C”所有。
    • 这是一个非常好的观点,我在想一些完全不同的东西!哈哈,对不起。非常感谢您的快速回答!
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 2015-09-28
      相关资源
      最近更新 更多