mysql 分数表 行数据转成列数据 行列转换

今天,在群里遇到有人问关于分数表行列转换的问题。我找小兄弟拿到了数据,写了sql 做了演示。

mysql 数据库 中,我们大部分查询是基于行的,查询一行或者几行数据,取出来。但是,有时候有些标的数据设计 是把列数据变成了行数据存储,这时候我们在查询数据的时候就需要把行数据转成列数据来展示。
这就是行列的转换,一般情况下很少遇到,不过遇到了之后,对mysql不是太熟了的同学可能有些棘手。今天,我就根据这个同学的实际生产中的例子,来演示下mysql下列 转成行的操作。

前提摘要:常见行列表设计,考试分数表
一般性设计: 
考生语文数学英语
张三908060
我们一般是这么设计成绩表,但是有些时候,有的小伙伴会采用另外一种方式存储数据,
设计如下:
考生科目类型分数
张三语文90
张三数学80
张三数学70

这种模式,逻辑上类似链表。但是在需要展示学生成绩的时候,不好展示,需要做行列变化。
有些朋友一般会在程序里通过代码做转换,但实际上,我们可以直接通过sql语句做转换。

下面是我今天给大家的例子:(例子来源于问问题的小伙伴提供)
表数据:百度网盘下载
提取码:xmp6

SQL:

SELECT kaohao_id,
SUM(CASE `subject_id` WHEN 1 THEN defen ELSE 0 END) AS 'k1',
SUM(CASE `subject_id` WHEN 2 THEN defen ELSE 0 END) AS 'k2',
SUM(CASE `subject_id` WHEN 3 THEN defen ELSE 0 END) AS 'k3'
FROM cj_chengji 
GROUP BY kaohao_id

我们通过 这种方式就可以把行数据转成列数据,
原理的话,请自行查看Mysql手册啦,这个我就不多说了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值