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

相关推荐
达梦数据4 小时前
达梦数据复制软件DMDRS搭建部署示例:源数据库DM8到目标数据库DM8一对一数据同步
数据库
IT_Octopus4 小时前
从一个应用开发者的角度,搞懂大数据查询的完整链路
java·大数据·数据库
Htr_4 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop
我是大猴子4 小时前
reids的数据结构的应用场景
数据库
螺蛳粉 螺蛳粉5 小时前
mysql的备份与恢复
linux·运维·数据库·mysql
艾醒(AiXing-w)5 小时前
LangChain 1.0 智能体开发(三):Agent 记忆管理——从短期对话到跨会话长期记忆
数据库·人工智能·langchain
MSTcheng.5 小时前
KES 进了 K8s 之后运维归谁管?
数据库
知识的搬运工旺仔6 小时前
CREATE INDEX CONCURRENTLY:线上建索引不阻塞 DML 的代价与坑
数据库·后端·sql
计算机毕设定制辅导-无忧学长6 小时前
《基于SpringBoot的中学教师数字胜任力测评网站的设计与实现》
java·vue.js·spring boot·mysql·中学教师数字胜任力测评网站
guo_wen_qiang6 小时前
mysql中有哪些日志
数据库·mysql