MySQL实现列转行与行转列的操作代码

 更新时间:2024年09月25日 09:14:27   作者:codeMonkey_gxy  
在处理数据时,我们常常会遇到需要将表中的列(字段)转换为行,或将行转换为列的情况,这种操作通常被称为“列转行”(Pivoting)和“行转列”(Unpivoting),本文将向您介绍如何使用 CASE 语句、聚合函数以及 GROUP BY 子句来完成列转行和行转列的操作

引言

在处理数据时,我们常常会遇到需要将表中的列(字段)转换为行,或将行转换为列的情况。这种操作通常被称为“列转行”(Pivoting)和“行转列”(Unpivoting)。在 MySQL 中,虽然没有直接提供 PIVOT 和 UNPIVOT 这样的关键字,但我们可以使用其他方法来实现这些功能。本文将向您介绍如何使用 CASE 语句、聚合函数以及 GROUP BY 子句来完成列转行和行转列的操作。

列转行(Pivoting)

列转行是指将表格中的一列或多列的值转换成新的列标题,并且将对应的数据填充到这些新列中。下面通过一个例子来说明这个过程。

示例数据

假设有一个成绩表 scores,包含学生的姓名 name、科目 subject 和分数 score

CREATE TABLE scores (
    name VARCHAR(50),
    subject VARCHAR(20),
    score INT
);

INSERT INTO scores (name, subject, score) VALUES
('Alice', 'Math', 95),
('Alice', 'English', 88),
('Bob', 'Math', 76),
('Bob', 'English', 92);

转换前查询结果

SELECT * FROM scores;
+-------+---------+-------+
| name  | subject | score |
+-------+---------+-------+
| Alice | Math    |    95 |
| Alice | English |    88 |
| Bob   | Math    |    76 |
| Bob   | English |    92 |
+-------+---------+-------+

列转行 SQL 语句

我们需要将 subject 列的不同值变为新的列名,并把对应的 score 填充进去。

SELECT
    name,
    MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END) AS Math,
    MAX(CASE WHEN subject = 'English' THEN score ELSE NULL END) AS English
FROM
    scores
GROUP BY
    name;

转换后查询结果

+-------+------+---------+
| name  | Math | English |
+-------+------+---------+
| Alice |   95 |      88 |
| Bob   |   76 |      92 |
+-------+------+---------+

行转列(Unpivoting)

行转列是列转行的逆过程,即将多个列的数据转换成一行多条记录的形式。这可以通过 UNION ALL 来实现。

示例数据

假设现在有另一个表 students,它已经以列转行后的形式存储了学生的信息:

CREATE TABLE students (
    name VARCHAR(50),
    Math INT,
    English INT
);

INSERT INTO students (name, Math, English) VALUES
('Alice', 95, 88),
('Bob', 76, 92);

转换前查询结果

SELECT * FROM students;
+-------+------+---------+
| name  | Math | English |
+-------+------+---------+
| Alice |   95 |      88 |
| Bob   |   76 |      92 |
+-------+------+---------+

行转列 SQL 语句

我们将每个科目的成绩都变成单独的一行记录。

SELECT
    name,
    'Math' AS subject,
    Math AS score
FROM
    students
UNION ALL
SELECT
    name,
    'English' AS subject,
    English AS score
FROM
    students;

转换后查询结果

+-------+---------+-------+
| name  | subject | score |
+-------+---------+-------+
| Alice | Math    |    95 |
| Bob   | Math    |    76 |
| Alice | English |    88 |
| Bob   | English |    92 |
+-------+---------+-------+

通过以上示例,我们可以看到如何在 MySQL 中灵活地进行列转行和行转列的数据转换。希望这些技巧能够帮助您更好地管理和分析数据库中的数据。

到此这篇关于MySQL实现列转行与行转列的操作代码的文章就介绍到这了,更多相关MySQL列转行与行转列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql之DML的select分组排序方式

    mysql之DML的select分组排序方式

    在此教程中,我们详细介绍如何创建员工(employee)和部门(department)数据库表,并展示了如何通过SQL语句进行数据插入、删除和查询,首先,创建了部门表并自动设置部门编号起始值为1001,接着创建员工表并定义了各字段,我们还设置了外键关联两表
    2024-09-09
  • MySQL group_concat函数使用方法详解

    MySQL group_concat函数使用方法详解

    GROUP_CONCAT函数用于将GROUP BY产生的同一个分组中的值连接起来,返回一个字符串结果,接下来就给大家简单的介绍一下MySQL group_concat函数的使用方法,需要的朋友可以参考下
    2023-07-07
  • mybatis中bind的使用示例详解

    mybatis中bind的使用示例详解

    在 MyBatis 中,bind 标签允许在 OGNL 表达式上下文中创建一个变量并将其绑定到当前上下文,常用于动态 SQL 中简化复杂表达式或重复计算,这篇文章主要介绍了mybatis中bind的使用示例详解,需要的朋友可以参考下
    2025-06-06
  • Mysql中存储UUID去除横线的方法

    Mysql中存储UUID去除横线的方法

    这篇文章主要介绍了Mysql中存储UUID去除横线的方法,本文给出了3个Mysql函数实现去除去UUID中的横线,需要的朋友可以参考下
    2015-02-02
  • Mysql环境变量配置方式

    Mysql环境变量配置方式

    这篇文章主要介绍了Mysql环境变量配置方式,具有很好的参考价值,希望对大家有所帮助。
    2022-12-12
  • MySQL5.7免安装版配置图文教程

    MySQL5.7免安装版配置图文教程

    Mysql是一个比较流行且很好用的一款数据库软件,如下记录了我学习总结的mysql免安装版的配置经验,感兴趣的的朋友参考下吧
    2017-09-09
  • 解决windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件的问题

    解决windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件的问题

    这篇文章主要介绍了解决windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • MySQL优化之Index Merge的使用

    MySQL优化之Index Merge的使用

    本文主要介绍了MySQL优化之Index Merge的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • MySQL5.6 Replication主从复制(读写分离) 配置完整版

    MySQL5.6 Replication主从复制(读写分离) 配置完整版

    这篇文章主要介绍了MySQL5.6 Replication主从复制(读写分离) 配置完整版,需要的朋友可以参考下
    2016-04-04
  • 教你使用MySQL Shell连接数据库的方法

    教你使用MySQL Shell连接数据库的方法

    在有些情况下我们需要使用命令行方式连接MySQL数据库,这时可以使用MySQL官方提供的命令行工具MySQL Shell,今天通过本文给大家介绍下mysql Shell连接数据库的方法,感兴趣的朋友一起看看吧
    2022-04-04

最新评论