MySQL在多个表中连接的Grouped数据计数

时间:2016-01-14 03:35:54

标签: mysql join count group-by

作为一个SQL新手,只是想把事情拼凑在一起,我觉得有一个更优雅的解决方案,我似乎无法想出来。我发现很多看似相似但不完全的例子,尽管如此,我的查询总是一团糟而且没有成功。我正在处理的结构是三个表格,如下面的简要示例所示。具有唯一ID和各种章节号以及" SN"," SC'或" GS"的member_status的用户表。带有唯一ID和各省ID的章节表。我引用的第三个表格是我的省表,唯一的因素是唯一的省份ID列表。我的用户表是一个非常大的数据集,我担心任何子查询的使用或可能影响速度的其他问题。一些有希望的例子使用与Count不同,但如果是这样我就无法正确组织。

我的最终目标也是以下示例,但是要获得状态为IN的所有成员的计数(" SC",#34; SN"),这些成员位于具体省份。我知道我必须让table_users.chapter加入table_chapters.id。我我还需要将table_chapters.province_id联合到table_provinces.id。在潜在的Count和Group By之间,我只是迷路了,任何帮助都会受到赞赏。如果需要,我很乐意提供更多信息。

如果有帮助的话,我已经开始在SQLFiddle中加载我的数据了。

Check here for SQLFiddle schema

数据架构

table_users

id | chapter | member_status
---------------------
1  |   101   |   GS
2  |   101   |   SN
3  |   101   |   SC
4  |   102   |   SN
5  |   102   |   GS
6  |   103   |   SC
7  |   103   |   SC
8  |   104   |   SN
9  |   104   |   SN
10 |   104   |   SC
11 |   105   |   GS
12 |   105   |   SC

table_chapters

id   | province_id
-------------------
101  |     1
102  |     2
103  |     2
104  |     1
105  |     3

table_provinces

table_provinces just with sequential list by id

所需输出

Province id | Count of Members
------------------------------
      1     |       5
      2     |       3
      3     |       1

注意输出忽略了" GS"

的状态

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望所有用户记录的计数与其他表中的章节匹配。

试试这个:

select c.province_id,count(u.member_status) as member_count from users u 
inner join chapters c on u.chapter=c.id
where u.member_status in ('SC','SN')
group by c.province_id

SQL小提琴:http://sqlfiddle.com/#!9/4da100/5