三张表联合查询并分组统计

lshfong 2014-04-08 05:15:47
A表
id,name,userid
b表
id,name,userid
c表
id,name,userid
我想生成如下格式的数据
A表 B表 C表 全部共计
10 20 10 40

=============================
我现在只能分组统计一张表select count(*) as num,userid from A group by userid
...全文
383 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
benluobo 2014-04-08
  • 打赏
  • 举报
回复
select sum(if(bz='a',1,0)),sum(if(bz='b',1,0)),sum(if(bz='c',1,0)),count(*) from ( select 'a' as bz,a.* from a union all select 'b' as bz,b.* from b union all select 'c' as bz,c.* from c) a1 group by userid
benluobo 2014-04-08
  • 打赏
  • 举报
回复
那可以参考3楼的写法,不过需要改一个语法错误 select sum(if(bz='a',1,0)),sum(if(bz='b',1,0)),sum(if(bz='c',1,0)),count(*) from ( select 'a' as bz,a.* from a union all select 'b' as bz,b.* from b union all select 'c' as bz,c.* from c) a1 group by userid
lshfong 2014-04-08
  • 打赏
  • 举报
回复
用三楼的方法解决了,谢谢各位的热心解答
lshfong 2014-04-08
  • 打赏
  • 举报
回复
userid同时在三个表中都有,才会显示 任何一个表中没有,最后统计出来的结果中就会没有
benluobo 2014-04-08
  • 打赏
  • 举报
回复
哪些没有显示出来?
lshfong 2014-04-08
  • 打赏
  • 举报
回复
引用 5 楼 benluobobo 的回复:
select tmp1.userid userid, ac countA, bc countB, cc countC, ac+bc+cc countAll from (select userid,count(id) ac from a group by userid) tmp1 inner join (select userid,count(id) bc from b group by userid) tmp2 inner join (select userid,count(id) cc from c group by userid) tmp3 on tmp1.userid = tmp2.userid and tmp1.userid = tmp3.userid
这样统计很接近,但是显示不完,有些记录没显示出来
lshfong 2014-04-08
  • 打赏
  • 举报
回复
A表 id,name,userid b表 id,name,userid c表 id,name,userid 我想生成如下格式的数据 A表 B表 C表 全部共计 10 20 10 40 15 10 30 55 20 20 20 60 ====================== 统计要实现这种效果
benluobo 2014-04-08
  • 打赏
  • 举报
回复
select tmp1.userid userid, ac countA, bc countB, cc countC, ac+bc+cc countAll from (select userid,count(id) ac from a group by userid) tmp1 inner join (select userid,count(id) bc from b group by userid) tmp2 inner join (select userid,count(id) cc from c group by userid) tmp3 on tmp1.userid = tmp2.userid and tmp1.userid = tmp3.userid
benluobo 2014-04-08
  • 打赏
  • 举报
回复
select tmp1.userid userid, ac countA, bc countB, ac+bc countAll from (select userid,count(id) ac from a group by userid) tmp1 inner join (select userid,count(id) bc from b group by userid) tmp2 on tmp1.userid = tmp2.userid
WWWWA 2014-04-08
  • 打赏
  • 举报
回复
select sum(if(bz='a',1,0)),sum(if(bz='b',1,0)),sum(if(bz='c',1,0)),count(*) from ( select 'a' as bz,* from a union all select 'b' as bz,* from b union all select 'c' as bz,* from c) a1 group by userid
benluobo 2014-04-08
  • 打赏
  • 举报
回复
是统计总数还是每个userid的总数
码无边 2014-04-08
  • 打赏
  • 举报
回复
select count(a.id) as aid,count(b.id) as bid,count(c.id) as cid,sum(aid+bid+cid) from a join b on a.userid=b.userid join c on b.userid=c.userid group by a.userid,b.userid,c.userid

56,803

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧