您的位置:首页 > 汽车 > 新车 > 58同城最新招聘_外包业务_百度提交入口的网址_台州百度快照优化公司

58同城最新招聘_外包业务_百度提交入口的网址_台州百度快照优化公司

2024/9/21 18:41:25 来源:https://blog.csdn.net/binbinxyz/article/details/142336238  浏览:    关键词:58同城最新招聘_外包业务_百度提交入口的网址_台州百度快照优化公司
58同城最新招聘_外包业务_百度提交入口的网址_台州百度快照优化公司

在数据库操作中,有时我们需要将行数据转换为列数据,这在生成报表或进行数据汇总时尤为常见。本文将以一个学生成绩表为例,演示在MySQL中实现行转列的几种方法。

示例数据

假设我们有一个学生成绩表 score,包含以下三列:sid(学生ID)、cid(科目ID)和score(分数)。表中的数据如下:

sidcidscore
1190
1285
1395
2188
2292
2387
3195
3289
3391

我们的目标是将这些行数据转换为列数据,使得每个学生的成绩按科目显示在不同的列中。

方法1:使用 GROUP BY 和 CASE 语句

这是最常用的方法之一,通过使用 GROUP BY 和 CASE 语句,可以将行数据聚合并转换为列数据。

SELECT sid,MAX(CASE WHEN cid = 1 THEN score ELSE NULL END) AS a,MAX(CASE WHEN cid = 2 THEN score ELSE NULL END) AS b,MAX(CASE WHEN cid = 3 THEN score ELSE NULL END) AS c
FROM score
GROUP BY sid;

结果将是:

sidabc
1908595
2889287
3958991

方法2:使用子查询和聚合函数

SELECT s1.sid,s1.score AS a,s2.score AS b,s3.score AS c
FROM (SELECT sid, score FROM score WHERE cid = 1) s1
LEFT JOIN (SELECT sid, score FROM score WHERE cid = 2) s2 ON s1.sid = s2.sid
LEFT JOIN (SELECT sid, score FROM score WHERE cid = 3) s3 ON s1.sid = s3.sid;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com