【问题标题】:How do I get count of duplicated values and join the table to retrieve each value's name?如何获取重复值的计数并加入表以检索每个值的名称?
【发布时间】:2010-09-18 11:11:52
【问题描述】:

我有两张桌子,一张是志愿者,一张是场地。 每个志愿者被分配一个场地

场地表 (venues.id) 的 id 放置在志愿者表中的场地_id 列 (volunteers.venue_id) 中。

我知道我可以通过

计算出志愿者.venue_id 列中有多少匹配值
SELECT venue_id, COUNT(*) FROM volunteers GROUP BY venue_id

我为什么要这样做:这样用户就可以进去查看每个场地分配了多少志愿者。

表:志愿者 -- 列:id、name、venue_id

表:场所 -- 列:id、场所名称

volunteers.venue_id = 场地.id

我知道这将是某种形式的 join 声明,因此它会计算每个场所的计数,然后将志愿者.venue_id 与场所.id 匹配并打印出场所.场所名称以及计数。

我将如何连接这两个表以打印出场地名称并在其旁边列出具有该场地_id 的每个志愿者的数量?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    这将为您提供所有场地,其中没有志愿者出现的志愿者人数为 0

    select venues.venue_name, count(*) as volunteer_count
    from venues
    left outer join volunteers
       on venues.id = volunteers.venue_id
    group by venues.venue_name
    

    [编辑] 我刚刚意识到您要求使用 MySQL。我不记得 MySQL 是使用 LEFT JOIN 还是 LEFT OUTER JOIN。上面的语法对于 SQLSERVER 是正确的。关键是外连接而不是内连接来获取没有志愿者的场地。

    【讨论】:

    • FWIW,LEFT JOIN 和 LEFT OUTER JOIN 都在 MySQL 中工作,它们的工作方式相同。
    【解决方案2】:
    SELECT venues.venue_name, COUNT(volunteers.*) AS cvolun
      FROM venues
      INNER JOIN volunteers
        ON venues.id = volunteers.venue_id
    

    【讨论】:

    • 内部连接意味着它只报告至少有一个志愿者的场所。它没有报告任何志愿者为零的场所。这就是为什么这个问题需要外连接。
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 2022-01-12
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多