【问题标题】:mySQL count occurrences with JOINmySQL 使用 JOIN 计数出现次数
【发布时间】:2013-08-07 11:01:06
【问题描述】:

我有一个用于我的事件系统的标记系统我想创建一个“标记云”。

我有事件,它可以有多个“类别”。

这是表结构:

**Event_Categories** (Stores Tags / Categories)
| id  | name      |
+-----------------+
+ 1   | sport     |
+ 2   | charity   |
+ 3   | other_tag |


**Events_Categories** (Linking Table)
| event_id  | event_category_id |
+-------------------------------+
+    1      |       1           |   
+    2      |       2           |   
+    3      |       1           |   
+    3      |       2           |   

总结:

Event ID 1 -> Sport
Event ID 2 -> Charity
Event ID 3 -> Sport, Charity

我想返回以下内容:

| tag_name  | occurrences |
+-----------+-------------+
|  sport    |     2       |
|  society  |     2       |

other_tag - 实际上没有返回,因为它有 0 次出现

谢谢! :)

【问题讨论】:

    标签: mysql join count one-to-many


    【解决方案1】:

    这将起作用:

    SELECT c.name AS tag_name, COUNT(ec.event_id) AS occurrences 
    FROM Event_Categories c 
    INNER JOIN Events_Categories ec ON c.id = ec.event_category_id 
    GROUP BY c.id
    

    如果您想包含出现次数为 0 的类别,请将 INNER JOIN 更改为 LEFT JOIN

    【讨论】:

    • 谢谢,但是即使没有,这也会返回出现次数=1?计数似乎也不正确?
    【解决方案2】:

    怎么样

    SELECT e.name,
    COUNT(1)
    FROM Event_Categories e INNER JOIN
    Events_Categories_Linking ec ON e.id = ec.event_category_id
    GROUP BY e.name
    

    SQL Fiddle DEMO

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      相关资源
      最近更新 更多