mysql 分组求和

opq8976712 2016-01-06 08:32:35
表A:
id comid uid cnt
1 1 1 1
2 1 2 3
3 1 3 5
表B:
id comid uid cnt
1 1 1 1
2 1 2 4
3 1 3 5
表C:
id comid uid cnt
1 1 1 1
2 1 2 5
3 1 3 5

求问:我想把这A.B.C这三张表,comid相同的cnt求和的sql该怎么写结果类似于:
comid a.cnt b.cnt c.cnt
1 9 10 11
...全文
1395 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2016-01-07
  • 打赏
  • 举报
回复
这么改就行:
select comid 
,sum(case when Flag='A' then cnt else 0 end)  AS Acnt
,sum(case when Flag='B' then cnt else 0 end)  AS Bcnt
,sum(case when Flag='C' then cnt else 0 end)  AS Ccnt
,coms.names
,users.names
from 
(select *,'A' as Flag from A
union all
select *,'B' as Flag from B
union all
select *,'C' as Flag from C
) as T
left join coms on coms.id = T.comid
left join users on users.id = T.comsid

group by comid,coms.names,users.names
opq8976712 2016-01-07
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:

select comid 
,sum(case when Flag='A' then cnt else 0 end)  AS Acnt
,sum(case when Flag='B' then cnt else 0 end)  AS Bcnt
,sum(case when Flag='C' then cnt else 0 end)  AS Ccnt
from 
(select *,'A' as Flag from A
union all
select *,'B' as Flag from B
union all
select *,'C' as Flag from C
) as T
group by comid
你好,如果我想再关联两张表该如何写啊 表coms: id names 1 测试 表users: id names comsid 10 自己 1 想要的结果 comid a.cnt b.cnt c.cnt coms.names users.names 1 9 10 11 测试 自己
文修 2016-01-07
  • 打赏
  • 举报
回复
楼主你好 一楼正解,楼主可以一试
中国风 2016-01-06
  • 打赏
  • 举报
回复

select comid 
,sum(case when Flag='A' then cnt else 0 end)  AS Acnt
,sum(case when Flag='B' then cnt else 0 end)  AS Bcnt
,sum(case when Flag='C' then cnt else 0 end)  AS Ccnt
from 
(select *,'A' as Flag from A
union all
select *,'B' as Flag from B
union all
select *,'C' as Flag from C
) as T
group by comid

57,064

社区成员

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

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