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

相关推荐
AskHarries12 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
消失在人海中12 小时前
oracle 数据库多表关联查询
服务器·数据库·oracle
九皇叔叔12 小时前
PostgreSQL/openGauss pg_stats 视图从入门到精通:统计信息、执行计划与慢 SQL 优化实战
数据库·sql·postgresql
南极企鹅13 小时前
MySQL间隙锁&临键锁
数据库·sql·mysql
TDengine (老段)14 小时前
TDengine 压缩编码机制 — 双层压缩架构与类型特化算法
大数据·数据库·物联网·算法·时序数据库·tdengine·涛思数据
苏渡苇15 小时前
Redis 持久化——RDB 快照 vs AOF 日志
数据库·redis·缓存·redis持久化·aof vs rdb
l1t16 小时前
DeepSeek总结的使用 PEG 实现运行时可扩展的 SQL 解析器
数据库·sql
这个DBA有点耶16 小时前
COUNT进阶(续):超大表去重计数的极致优化
数据库·架构·代码规范
爱喝水的鱼丶16 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第四篇:SAP 报表异常处理机制:数据校验与消息提示规范落地
开发语言·数据库·学习·算法·sap·abap
_1_716 小时前
SQL SERVER闪退问题解决
数据库·sqlserver