我有以下表结构:
用户表:
id username
1 bob
2 john
3 harry
帖子表:
id user_id status
1 1 4
2 2 4
3 3 2
4 1 1
5 2 1
如果我想要每个用户的帖子和状态列的摘要,那么生成它的最有效的sql是什么? 例如:
username status 4 status 2 status 1
bob 1 0 1
john 1 0 1
harry 0 1 0
答案 0 :(得分:0)
这应该有效:
SELECT users.username
, sum(if(posts.status=4,1,0)) as `status 4`
, sum(if(posts.status=2,1,0)) as `status 2`
, sum(if(posts.status=1,1,0)) as `status 1`
FROM users, posts
WHERE users.id=posts.user_id
GROUP BY users.id
答案 1 :(得分:0)
您可以尝试这样的事情: -
SELECT A.USERNAME,
CASE WHEN STATUS = 4 THEN COUNT(B.STATUS) AS STATUS4 ELSE 0 END,
CASE WHEN STATUS = 2 THEN COUNT(B.STATUS) AS STATUS2 ELSE 0 END,
CASE WHEN STATUS = 1 THEN COUNT(B.STATUS) AS STATUS1 ELSE 0 END,
FROM USERS INNER JOIN POSTS
ON USERS.ID = POSTS.USER_ID
GROUP BY USERS.ID;
这可能会对你有帮助。