Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql行转列三种方式

作者:枫尘于往逝   发布日期:2025-09-09   浏览:9

-- 方式一:使用 CASE WHEN 进行行转列
SELECT 
    id,
    MAX(CASE WHEN subject = 'Math' THEN score END) AS Math,
    MAX(CASE WHEN subject = 'English' THEN score END) AS English,
    MAX(CASE WHEN subject = 'Science' THEN score END) AS Science
FROM 
    scores
GROUP BY 
    id;

-- 解释:通过 CASE WHEN 语句将不同的科目转换为列,并使用 MAX 函数来确保每个学生每门课的成绩只显示一次。

-- 方式二:使用 PIVOT 函数(适用于 MySQL 8.0 及以上版本)
SELECT * FROM (
    SELECT id, subject, score FROM scores
) AS src
PIVOT (
    MAX(score) FOR subject IN ('Math', 'English', 'Science')
) AS pvt;

-- 解释:PIVOT 函数可以直接将行数据转换为列数据,简化了 SQL 语句的编写。需要注意的是,PIVOT 函数在 MySQL 8.0 及以上版本中可用。

-- 方式三:使用 GROUP_CONCAT 和 SUBSTRING_INDEX 函数组合实现行转列
SELECT 
    id,
    SUBSTRING_INDEX(GROUP_CONCAT(IF(subject = 'Math', score, NULL)), ',', 1) AS Math,
    SUBSTRING_INDEX(GROUP_CONCAT(IF(subject = 'English', score, NULL)), ',', 1) AS English,
    SUBSTRING_INDEX(GROUP_CONCAT(IF(subject = 'Science', score, NULL)), ',', 1) AS Science
FROM 
    scores
GROUP BY 
    id;

-- 解释:通过 GROUP_CONCAT 和 SUBSTRING_INDEX 函数组合,可以实现行转列的效果。这种方法适用于较早版本的 MySQL。

上一篇:decimal mysql

下一篇:mysql row_format

大家都在看

mysqlavg函数保留小数

mysql显示表内容

mysql经纬度距离计算

存储过程mysql

mysql with语句

mysql时间加减

mysql查询表名,模糊匹配

brew 启动mysql

unsigned在mysql中是什么意思

mysql 备份恢复

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站