对MySQL中两个一对多关系求和

时间:2019-05-23 02:50:04

标签: mysql

我需要总结一下另一个一对多关系中一对多关系的计数。我不知道那是否有可能,但是我必须尝试。

我有三个表,如下所示:

'plan_by_years' 

ID  year    circle_id   ...
1   2018    1   
2   2018    2   
3   2019    1   
4   2020    3   

等,基本上一年可以有很多圈子。 现在,每个圈子可以有很多成员,并且一年中都在运营

'members'
ID  member  circle_id
1   A       1
2   B       1
3   C       2
4   C       1
5   D       3

我需要将数据放入一个表中,以便以后可以对其进行排序和过滤。该表必须包含一年中的成员总数和圈子总数。会员每年只能计数一次。

结果应如下所示:

year    number_of_circle    total_member
2018    2                   3
2019    1                   3
2020    1                   1

请帮助。

1 个答案:

答案 0 :(得分:2)

您可以通过两个单独的COUNT获得此结果,一个用于圈子,一个用于成员。在这两种情况下,您都需要COUNT(DISTINCT ...)来避免每年重复计算圈子或成员:

SELECT p.year,
       COUNT(DISTINCT p.circle_id) AS number_of_circle,
       COUNT(DISTINCT m.member) AS total_member
FROM plan_by_years p
LEFT JOIN members m ON m.circle_id = p.circle_id
GROUP BY p.year

输出:

year    number_of_circle    total_member
2018    2                   3
2019    1                   3
2020    1                   1

Demo on dbfiddle