Sql 获取编号为一对多表计数的所有记录

Sql 获取编号为一对多表计数的所有记录,sql,Sql,我有两张表,一张是会员,另一张是会员状态表。我需要获得处于相同状态的成员数的计数 成员 +----+-------------+-----------+---------+--------+--------+--------------+---------+---------------------+---------------------+ | id | full_name | mobile_no | address | status | remark | edit_user_id |

我有两张表,一张是会员,另一张是会员状态表。我需要获得处于相同状态的成员数的计数

成员

+----+-------------+-----------+---------+--------+--------+--------------+---------+---------------------+---------------------+
| id | full_name   | mobile_no | address | status | remark | edit_user_id | user_id | created_at          | updated_at          |
+----+-------------+-----------+---------+--------+--------+--------------+---------+---------------------+---------------------+
|  1 | John Doe    | 123       |         | 1      |        |            1 |       1 | 2014-06-19 15:51:08 | 2014-06-19 15:51:08 |
|  2 | Michael Bay | 123       |         | 1      |        |            1 |       1 | 2014-06-19 15:51:08 | 2014-06-19 15:51:08 |
|  3 | Hey Hey     | 123       |         | 3      |        |            1 |       1 | 2014-06-19 15:51:08 | 2014-06-19 15:51:08 |
+----+-------------+-----------+---------+--------+--------+--------------+---------+---------------------+---------------------+
会员资格

+----+---------------------+----------------------+--------+--------------+---------+---------------------+---------------------+
| id | name                | description          | status | edit_user_id | user_id | created_at          | updated_at          |
+----+---------------------+----------------------+--------+--------------+---------+---------------------+---------------------+
|  1 | Visitor             | Visitor              | 1      |            1 |       1 | 2014-06-19 15:51:08 | 2014-06-19 15:51:08 |
|  3 | Member              | Member               | 1      |            1 |       1 | 2014-06-19 15:51:08 | 2014-06-19 15:51:08 |
|  4 | Level 1             | Level 1              | 1      |            1 |       1 | 2014-06-19 15:51:08 | 2014-06-19 15:51:08 |
| 11 | Level 12            | Level 12             | 1      |            1 |       1 | 2014-07-03 17:27:00 | 2014-07-03 17:27:00 |
+----+---------------------+----------------------+--------+--------------+---------+---------------------+---------------------+
我尝试过这个查询,但它的输出不正确

select `member_status`.`name`, count(*) as totalNum
from member
right join `member_status` on (member.`status` = `member_status`.id) 
group by `member_status`.name
这是我想要的输出

+---------------------+----------+
| name                | totalNum |
+---------------------+----------+
| Level 1             |        0 |
| Level 12            |        0 |
| Member              |        1 |
| Visitor             |        2 |
+---------------------+----------+
然而,不知怎的,输出就是这个

+---------------------+----------+
| name                | totalNum |
+---------------------+----------+
| Level 1             |        1 |
| Level 12            |        1 |
| Member              |        1 |
| Visitor             |        2 |
+---------------------+----------+

任何人都可以提供建议吗?

您需要相关子查询以获得此类结果:

select      member_status.name, m.m_qty AS totalNum

from        member_status
left join   (
                select      member.status, count(member.id) AS m_qty
                from        member
                group by    member.status
            ) AS m ON (m.status = member_status.id) 
选择S.NAME,SUM(S.ID=T.STATUS时为1,否则为0结束)
来自成员_状态S、成员T
按S.NAME分组

这个怎么样:

select `member_status`.`name`, CASE WHEN member.`status` IS NULL THEN 0 ELSE count(*) as totalNum END
from member
right join `member_status` on (member.`status` = `member_status`.id) 
group by `member_status`.name, member.`status` 
试试看
从成员右键选择*加入成员状态(member.status=member\u status.id)

您将看到成员字段为NULL-s。 这就是为什么你得到了比你想要的更多的计数

解决方案之一:
选择member\u status.name,count(member.id)作为totalNum
从成员右侧加入成员状态(member.status=member\u status.id)
按成员分组\u状态。名称

选择member_status.name,sum(member.id为null时为0,否则为1 END)作为totalNum
从成员右侧加入成员状态(member.status=member\u status.id)

按成员分组\u状态。名称

是否有任何用于上述表的插入查询脚本或SQLFIDLE?您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的(member.
status
=
status
=
status
)上使用near'as totalNum END from members right join
member_status
的正确语法