MySQL中实现行转列的三种常用方法详解
在MySQL中,行转列(即将多行数据转换为一行中的多列)可以通过CASE WHEN语句结合聚合函数、使用GROUP_CONCAT函数或借助PIVOT(需MySQL 8.0以上版本) 来实现。CASE WHEN是最通用且兼容性高的方法,适用于大多数场景,若需将学生成绩表中的多门课程成绩转换为一行显示,可编写如下查询:
SELECT
student_id,
MAX(CASE WHEN subject = '数学' THEN score END) AS 数学,
MAX(CASE WHEN subject = '语文' THEN score END) AS 语文
FROM scores
GROUP BY student_id;
此方法通过按条件分类并聚合数据,将不同科目的成绩分散到不同列中。

对于动态列数的行转列需求,GROUP_CONCAT函数能灵活拼接数据,但结果会合并为单列字符串,
SELECT
student_id,
GROUP_CONCAT(CONCAT(subject, ':', score)) AS 成绩汇总
FROM scores
GROUP BY student_id;
而在MySQL 8.0及以上版本中,可通过PIVOT操作(需结合条件聚合)更直观地实现行列转换,但其语法相对复杂,需注意版本兼容性。
选择行转列方法时,需根据数据静态性、MySQL版本及结果格式要求灵活决策,静态列推荐使用CASE WHEN,动态列则可考虑GROUP_CONCAT或应用层后续处理。
未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/13624.html发布于:2026-08-28





