MySQL中想要把两个表中的id汇总在一起,并统计各个id出现的次数

MySQL中想要把两个表中的id汇总在一起,并统计各个id出现的次数,第一个表是topic表如下图所示:


第二个表是reply表,如下图所示:


想要得到的结果是:(只存在于topic 表和只存在于reply表和两个表中共同存在的id全都显示出来,并把每个id在两个表中出现的次数统计在一起)

SQL语句:

select a.uId,(a.total+IFNULL(b.total,0))count from(select uId,COUNT(uId) total from topic group byuId) a left join (selectuId,count(uId) total from reply GROUP BY uId) b on a.uId=b.uId union select b.uId,IFNULL(a.total,0)+b.totalfrom(select uId,COUNT(uId) total from topic group by uId) a right join (selectuId,count(uId) total from reply GROUP BY uId) b on a.uId=b.uId

解析:因为MySQL中不支持全连接,所以使用union把左连接和右链接结合起来,绿色背景部分是查询出来topic表中的uId和每个uId出现的次数,并把这个查询结果作为一个表,黄色背景部分是查询出来reply表中的uId和每个uId出现的次数,并把查询结果作为另一个表。然后使用左连接把这两个表连接起来,这样得到的结果是只有左表中存在的,同样的方法使用右连接查询出来仅存在于右表中的数据,然后使用union把左连接和右连接联合在一起,就可以把两个表中的uId和他们的次数都显示出来。在使用左连接时要显示左表的uId,使用右连接时显示右表的uId,这样才能保证联合在一起是左右表的uId都显示。粉色阴影的表示在左连接时如果右表中该uId没有对应的count值,那么就置为0,同理在右连接中要使用ifnull把左表中没有的uId的count置为0。



猜你喜欢

转载自blog.csdn.net/QYHuiiQ/article/details/80364833
今日推荐