sql面试题:行列如何互换?

作者: 猴子数据分析 | 来源:发表于2019-05-30 13:51 被阅读33次

【面试题】下面是学生的成绩表(表名score,列名:学号、课程号、成绩)

使用sql实现将该表行转列为下面的表结构

【解答】

第1步,使用常量列输出目标表的结构

可以看到查询结果已经和目标表非常接近了

select学号,'课程号0001','课程号0002','课程号0003'fromscore;

第2步,使用case表达式,替换常量列为对应的成绩

select学号,(case课程号when'0001'then成绩else0end)as'课程号0001',(case课程号when'0002'then成绩else0end)as'课程号0002',(case课程号when'0003'then成绩else0end)as'课程号0003'fromscore;

在这个查询结果中,每一行表示了某个学生某一门课程的成绩。比如第一行是'学号0001'选修'课程号00001'的成绩,而其他两列的'课程号0002'和'课程号0003'成绩为0。

每个学生选修某门课程的成绩在下图的每个方块内。我们可以通过分组,取出每门课程的成绩。

第3关,分组

分组,并使用最大值函数max取出上图每个方块里的最大值

select学号,max(case课程号when'0001'then成绩else0end)as'课程号0001',max(case课程号when'0002'then成绩else0end)as'课程号0002',max(case课程号when'0003'then成绩else0end)as'课程号0003'fromscoregroupby学号;

这样我们就得到了目标表(行列互换)

如果对case表达式还不了解的,可以看下我讲过的《从零学会SQL》的“多表查询”。

推荐:如何用最短的时间找到初级数据分析师工作?

相关文章

  • sql面试题:行列如何互换?

    【面试题】下面是学生的成绩表(表名score,列名:学号、课程号、成绩) 使用sql实现将该表行转列为下面的表结构...

  • Mysql如何行列互换???

    需求:行列互换 请用一条SQL语句查询出这三条记录并按以下条件显示出来大于等于80表示优秀,大于等于60表示及格,...

  • 面试官问你 SQL 注入攻击了吗?

    为什么要聊 SQL 注入攻击? 什么是 SQL 注入攻击? 如何进行 SQL 注入攻击? 如何防范? 常见面试题 ...

  • Excel行列互换,你还在傻傻地复制粘贴吗?

    将excel的行列互换,是我们会经常遇到的操作。当然,如果数据少,凭着多年的Ctrl+C、Ctrl+V,行列互换不...

  • SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。 行列转换就是如下...

  • 线性代数-行列式性质

    D === 一、转置行列式:将D的行列互换()得到为D的转置行列式 ==== 性质一、行列式与它的转置行列式相等,...

  • SQL 行列转换

    前段时间有人问了一个问题,就是SQL的行列转换,当时有点懵没答上来,后来细细想一想,其实最近的一个项目就已经用到了...

  • SQL行列转换

    行转列1.1、case when1.2、内置函数pivot 列转行2.1、unpivot2.2、union实现

  • 2019-03-20

    行列式的性质 互换行列式中的两行(列),行列式变号推论:如果行列式D中有两行(列)完全相同,则 如果行列式D 中有...

  • Mysql行转列

    遇到的一个Sql面试题: 建表: Sql: 结果:

网友评论

    本文标题:sql面试题:行列如何互换?

    本文链接:https://www.haomeiwen.com/subject/alomtctx.html