MySQL 如何将多行数据转换成列

MySQL 如何将多行数据转换成列

在实际开发中,经常会遇到需要将多行数据转换成列的情况。比如,有一个表保存了每个人的学习成绩,现在需要将这些成绩按照学生姓名进行汇总并列在一行中。这时,就可以使用MySQL中的“GROUP BY”与“CASE WHEN”语句来实现。

阅读更多:MySQL 教程

GROUP BY语句

GROUP BY语句通常用来对查询结果进行分组,将相同的数据归为一组,并对各组数据进行统计。

例如,有一个表“scores”记录了每个学生的姓名和成绩,我们要求每个学生的总成绩:

SELECT name, SUM(score) AS total_score
FROM scores
GROUP BY name;
SQL

执行以上SQL语句后,会得到如下结果:

name total_score
张三 175
李四 185
王五 195

GROUP BY语句将所有姓名相同的记录分为一组,并对每组的成绩进行求和(使用了SUM函数)。

CASE WHEN语句

CASE WHEN语句是MySQL中的一种条件语句,用于根据不同的条件进行不同的操作。在此处,我们将使用CASE WHEN语句将多行数据转换成列。

例如,有一个表“scores”记录了每个学生的姓名、科目和成绩,我们要将每个学生的成绩转换成列,并显示每个科目的成绩:

SELECT name,
       SUM(CASE WHEN subject = '数学' THEN score ELSE 0 END) AS math_score,
       SUM(CASE WHEN subject = '语文' THEN score ELSE 0 END) AS chinese_score,
       SUM(CASE WHEN subject = '英语' THEN score ELSE 0 END) AS english_score
FROM scores
GROUP BY name;
SQL

执行以上SQL语句后,会得到如下结果:

name math_score chinese_score english_score
张三 90 50 35
李四 65 60 60
王五 80 55 60

上述SQL语句的含义为:

  • 对于每条记录,如果科目为“数学”,则将分数加入math_score中;如果科目为“语文”,则将分数加入chinese_score中;如果科目为“英语”,则将分数加入english_score中。
  • 如果科目不是“数学”、“语文”、“英语”三者之一,就将分数归为0。

这样,我们就将多行数据按照学生姓名转换成了列。如果需要对其他字段进行转换,只需要修改CASE WHEN语句中的条件即可。

COALESCE函数

另外,如果某个学生有的科目分数为空(NULL),那么对应的列也会显示为空。如果希望在该情况下,列显示0或“-”等符号,可以使用MySQL中的COALESCE函数。

例如:

SELECT name,
       COALESCE(SUM(CASE WHEN subject = '数学' THEN score ELSE NULL END), 0) AS math_score,
       COALESCE(SUM(CASE WHEN subject = '语文' THEN score ELSE NULL END), 0) AS chinese_score,
       COALESCE(SUM(CASE WHEN subject = '英语' THEN score ELSE NULL END), 0) AS english_score
FROM scores
GROUP BY name;
SQL

执行以上SQL语句后,如果某个学生的某个科目分数为空,对应的列会显示0。

总结

本文介绍了MySQL中如何将多行数据转换成列。通过使用GROUP BY与CASE WHEN语句,我们可以将表中的多行数据按照相同的字段转换成列,并进行统计计算。同时,还介绍了COALESCE函数的使用,可以帮助我们在列显示为空的情况下,指定默认值。这些方法和函数在实际开发中非常有用,掌握了这些技巧,可以更加灵活地进行数据处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册