本文内容来自MySQL开发技巧(二)
MySQL开发技巧学习笔记二
行列转换
行转列
使用场景:
1.每天记录的销售额,转为每月的销售额
2.学生成绩转为按科目记
例子
共有两张表,user1
用户表和user_kills
,记录user打怪的表
1.首先,查询出用户对应打怪的数目
select a.user_name,kills from user1 a join user_kills b where a.id = b.user_id;
结果如下:
2.按用户名分组,统计杀怪总和
select a.user_name,sum(kills) from user1 a join user_kills b where a.id = b.user_id group by user_name;
结果如下:
3.所以如果我们想查询孙悟空
的杀怪总和,可以使用如下的查询语句:
select sum(kills) as '孙悟空' from user1 a join user_kills b where a.id = b.user_id and a.user_name = '孙悟空';
同样,如果要查询猪八戒
的杀怪总和
select sum(kills) as '猪八戒' from user1 a join user_kills b where a.id = b.user_id and a.user_name = '猪八戒';
所以把统计结果由行转成列,可以使用如下的语句,这里使用了交叉连接cross join
:
select * from
(select sum(kills) as '孙悟空' from user1 a join user_kills