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

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

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

前提摘要:常见行列表设计,考试分数表
一般性设计: 
考生 语文 数学 英语
张三 90 80 60
我们一般是这么设计成绩表,但是有些时候,有的小伙伴会采用另外一种方式存储数据,
设计如下:
考生 科目类型 分数
张三 语文 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手册啦,这个我就不多说了。

你可能感兴趣的:(MYSQL)