我有两个表,一个是成员另一个是member_status表。我需要获得处于相同状态的成员数量。
构件
+----+-------------+-----------+---------+--------+--------+--------------+---------+---------------------+---------------------+
| 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 |
+----+-------------+-----------+---------+--------+--------+--------------+---------+---------------------+---------------------+
member_status
+----+---------------------+----------------------+--------+--------------+---------+---------------------+---------------------+
| 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(member.id) as totalNum
from member WHERE member.created_at between '2014-06-01 00:00:00' and '2014-07-31 23:59:59'
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 |
+---------------------+----------+
| Member | 1 |
| Visitor | 2 |
+---------------------+----------+
有人可以提供建议吗?
答案 0 :(得分:2)
SELECT MS.name,
count(M.id) as totalNum
FROM member_status MS
LEFT JOIN (SELECT * FROM member WHERE created_at between '2014-06-01 00:00:00' and '2014-07-31 23:59:59') M ON M.[status] = MS.id
GROUP BY MS.name
你必须像上面一样LEFT JOIN。
我刚编辑了代码。请参阅。
答案 1 :(得分:0)
选择
MS.name,COUNT(*)AS totalNum
从
member_status MS
LEFT JOIN成员M ON MS.id = M.status
和
M.created_at在'2014-06-01 00:00:00'和'2014-07-31 23:59:59'之间
通过...分组
MS.name
ORDER BY totalNum
答案 2 :(得分:0)
另一个答案是将where条件置于ON条件下
select `member_status`.`name`, count(member.id) as totalNum
from member WHERE
right join `member_status` on (member.`status` = `member_status`.id AND member.created_at between '2014-06-01 00:00:00' and '2014-07-31 23:59:59')
group by `member_status`.name