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面试题:行列如何互换?

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