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

相关推荐
李兆龙的博客5 分钟前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
倔强的石头_2 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间2 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西2 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西3 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹3 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
要开心吖ZSH4 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
loong_XL5 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶5 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba
Gl�ria5 小时前
MySQL 单机版 vs 高可用版:宕机排查 + 故障处理
mysql·adb·架构