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 joinmember_status
的正确语法