总结帖子状态的sql计数

时间:2014-07-03 08:25:40

标签: mysql sql

我有以下表结构:

用户表:

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

2 个答案:

答案 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;

这可能会对你有帮助。