MySQL中关于将列值转换为列名

我们有时候会有这种需求:
image.png
这种与列值相关的展示有时候非常具有数据的直观性,我将用一个小Demo来实现此类操作。


表结构

create table demo1(
    sname  varchar(20) not null  comment '学员',
    course varchar(10) not  null comment '科目',
    score float    not null comment '成绩'
)

 

插入如下数据:

snamecoursescore
张三 语文 100
张三 数学 90
张三 英语 80
李四 语文 90
李四 数学 70
李四 英语 100

MySQL提供了条件分支语法(类似于if/else、case...)

语法:
1.case key when 条件 then 结果 when 条件 then 结果 …else key(默认为原来的)end
2.if(作为列的字段 = '值', 要展示的数据字段,另外的值)


上代码:

select sname '姓名',
max(if(course = '语文', score,0))  '语文',
avg(case course when '数学' then score end)  '数学',
max(if(course = '英语',score,0))  '英语' 
from demo1 group by sname;

 

执行结果:

image.png

posted @   wxxwjef  阅读(3418)  评论(1编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示