我正在试图弄清楚如何显示每个用户在数据库中收到的消息数量。我有一个用户表,我想拉取用户ID(称为id)和用户名,以及一个消息表,其中包含一个id,一个fromid(来自用户的fkey),一个toid(来自用户的fkey),以及一个正文(消息的文本)。结果是这样的:
id | username | tocount | fromcount
1 | user1 | 2 | 3
2 | user2 | 1 | 1
3 | user3 | 3 | 1
4 | lastuser | 0 | 1
我怎样才能做到这一点?我尝试了许多不同的连接组合,但最终得到的结果不准确。
答案 0 :(得分:1)
一种方法使用union all
后跟group by
:
select userid, sum(fromnum) as fromcnt, sum(tonum) as tocnt
from ((select fromid as userid, 1 as fromnum, 0 as tonum
from messages
) union all
(select toid as userid, 0, 1
from messages
)
) ft
group by userid;