SQL计算符合条件行数量,并分列显示,怎么做

mosakashaka 2016-04-22 08:25:12
比如原始表格是这样:

test
ID dep leixing other
1 A 类型1 asdfs
2 A 类型1 fawef
3 B 类型2 aewf
4 B 类型3 fasdf
5 A 类型2 sf
6 A 类型3 af
7 A 类型3 awef


想生成一张这样的表:

dep l1 l2 l3
A 2 1 2
B 0 1 1

第一行:
第一列是原表的dep A,第二列是原表dep为A的记录中,leixing这一列是"类型1"的记录的数量。
同理第一行第三列是 原表dep为A的记录中,leixing这一列是"类型2"的记录的数量。
第二行:
第二行第二列,是原表dep为B的记录中,leixing这一列是"类型1"的记录的数量。
第二行第三列,是原表dep为B的记录中,leixing这一列是"类型2"的记录的数量。

有什么简单的方法吗?我自己想了一个,是这样的,但是感觉很复杂。。

with a as (select dep,leixing,count(*) as lxcount from test group by dep,leixing)
select dep,sum( case leixing when '类型1' then lxcount else 0 end)l1,
sum( case leixing when '类型2' then lxcount else 0 end)l2,
sum( case leixing when '类型3' then lxcount else 0 end)l3
from a group by dep
...全文
711 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
newhope2016 2016-04-22
  • 打赏
  • 举报
回复
select dep,sum(case type when 1 then 1 else 0 end) as T1, sum(case type when 2 then 1 else 0 end)as T2, sum(case type when 3 then 1 else 0 end)ass T3 from type group by dep;
ayzen1988 2016-04-22
  • 打赏
  • 举报
回复

select dep,sum( case leixing when '类型1' then 1 else 0 end)l1,
        sum( case leixing when '类型2' then 1 else 0 end)l2,
        sum( case leixing when '类型3' then 1 else 0 end)l3
        from a group by dep
mosakashaka 2016-04-22
  • 打赏
  • 举报
回复
引用 1 楼 newhope2016 的回复:
select dep,sum(case type when 1 then 1 else 0 end) as T1, sum(case type when 2 then 1 else 0 end)as T2, sum(case type when 3 then 1 else 0 end)ass T3 from type group by dep;
对哦,group by已经按第一列分类了

56,677

社区成员

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

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