mysql - 行列数据转换技巧

MySQL 最核心的两种数据转换技巧

行转列:用 case when

列转行:用 union all

一、行转列(多行 → 多列)

用:CASE WHEN

原始数据(行)

plaintext 复制代码
name | subject | score
小明   语文      90
小明   数学      80
小明   英语      85

行转列后(列变多)

plaintext 复制代码
name | 语文 | 数学 | 英语
小明   90    80    85

代码:CASE WHEN

sql 复制代码
select
    name,
    max(case when subject='语文' then score end) as 语文,
    max(case when subject='数学' then score end) as 数学,
    max(case when subject='英语' then score end) as 英语
from score
group by name;

二、列转行(多列 → 多行)

用:UNION ALL

原始数据(列)

plaintext 复制代码
name | 语文 | 数学 | 英语
小明   90    80    85

列转行后(行变多)

plaintext 复制代码
name | subject | score
小明   语文      90
小明   数学      80
小明   英语      85

代码:UNION ALL

sql 复制代码
select name, '语文' as subject, 语文 as score from score
union all
select name, '数学' as subject, 数学 as score from score
union all
select name, '英语' as subject, 英语 as score from score;

最终终极口诀

行变多 → 上下拼 → UNION ALL

列变多 → 左右展 → CASE WHEN

相关推荐
灯澜忆梦2 小时前
【MySQL10】进阶篇 | 索引_#1
数据库·sql·mysql
敲上瘾2 小时前
redis常用数据类型与操作方法
数据结构·数据库·redis·缓存
OceanWaves19933 小时前
mysql 5.7.29 主从同步配置
数据库·mysql·adb
molaoye3 小时前
win10下切换MySQL版本
数据库·mysql
丁引3 小时前
《数据清洗的艺术:如何用20行核心逻辑优雅地删除无标签图片》
前端·数据库·python
雨辰AI3 小时前
K8s 数据库 Secret 加密实战|密码明文漏洞彻底修复,等保密评双合规(金仓 / 达梦双库适配)
数据库·容器·kubernetes
c238563 小时前
MySQL 基础用法(下):查询进阶与核心特性
android·c语言·c++·mysql
XR1234567883 小时前
学校图书馆网络改造,方案谁更优?
网络·数据库·php
梦想的旅途23 小时前
企业微信自动化:自动发送文本、图片、文件
前端·数据库·microsoft
IvorySQL4 小时前
PostgreSQL 日报|复制槽泄漏修复(8 月 6 日)
数据库·postgresql