当前位置: 首页 > >

两表关联计数统计

发布时间:

一、背景
最*看到很多这样的SQL考察,如:A(user)表有id,name字段等,B(log)表有id,A.id等,统计每个人日志记录数,没有日志记录的为0,最后输出id,name,log_count字段
二、SQL解析
1.先放SQL看看
表数据user表:

log表:


SELECT t.id, t.`name`, COUNT(t.user_id) log_count FROM (SELECT e.id, e.`name`, v.user_id FROM user e LEFT JOIN log v ON e.id = v.user_id) t GROUP BY t.id ORDER BY log_count DESC;

结果:

2.解析
看内层有个聚合查询,user表的id和log表的user_id关联,所有出现log的user_id数量(去重)是小于等于user表的id数量的,所以使用左连接(user表在左,log表在右)把两表数据都查出来,看下结果:


SELECT e.id, e.`name`, v.user_id FROM user e LEFT JOIN log v ON e.id = v.user_id

结果:

3.获取数据
最后在这个临时表里获取我们数据,就是对id(临时表的id即user表id),在根据id分组,分别统计user_id出现次数并对次数倒序,user_id为null,计数时就是0



友情链接: