在弄数据报表的时候,我们常常会用到这个需求。
在mysql中行转列:
新建一个表,学生名字,课程,分数:
DROP TABLE IF EXISTS student;
create TABLE student(
username VARCHAR(20),
subjects VARCHAR(20),
score int(30)
);
INSERT into student VALUES('张三','语文',99);
INSERT into student values('张三','数学',88);
INSERT into student values('李四','语文',75);
INSERT into student values('李四','数学',93);
当我们普通查询的时候:
select * from student 得到的结果如下:
现在我们想要张三一行中,把全部课程的分数显示出来,改为如下:
SELECT st.username,
MAX(CASE st.subjects WHEN '语文' THEN st.score ELSE 0 END) '语文',
MAX(CASE st.subjects WHEN '数学' THEN st.score ELSE 0 END) '数学'
from student as st GROUP BY st.username
这就是我们要的结果。。。
使用:GROUP_CONCAT()函数:
SELECT st.username,GROUP_CONCAT(st.subjects) as '课程',GROUP_CONCAT(st.score) as '分数' from student st
GROUP BY st.username