行列互换问题,怎么办?送你一个万能模版

作者: 猴子数据分析 | 来源:发表于2020-04-23 22:02 被阅读0次

【题目】

下面是表名为cook的表

要求查询结果如下:

【解题思路】

电影《女男变错身》中是男女互换身份

这个题其实也是“互换身份”,叫做行列互换问题,就是将一维表转化为二维表。

1.输出行列互换的表结构

可以看出,需要输出的有5列,其中只有“年”这一列是表cook中原有的,其他4列(也就是2-5列:m1对应的是1月份、m2对应的是2月份、m3对应的是3月份、m4对应的是4月份)需要自己创建。

select年,m1,m2,m3,m4fromcook;

可以看出查询结果和目标表的列名结构一样,但是2-5列(m1、m2、m3、m4)的值不是题目要求的:

2. 如何将2-5列的值替换成对应的值?

可以用case语句进行条件判断来替换。

年份和月份匹配,则为对应值,不匹配则为0。

select年,(case月when'1'then值else0end)asm1,(case月when'2'then值else0end)asm2,(case月when'3'then值else0end)asm3,(case月when'4'then值else0end)asm4fromcook;

在这个查询结果中,每一行表示某年某月的某个值。比如第一行是2009年 1月份(m1)的值,而其他三列m2、m3、m4的值为0。

第二行是2009年 2月份(m2)的值,而其他三列的值为0。其他行以此类推。

又向目标接近了一步,但是多出来的0值,怎么办?

3.去掉0值,简化表格的行数

可以使用分组汇总来实现。按“年”分组(group by),然后用汇总函数(max)取出每组非零的值(也就是这个案例中的某年某月对应的数值)。

select年,max(case月when'1'then值else0end)as'm1',max(case月when'2'then值else0end)as'm2',max(case月when'3'then值else0end)as'm3',max(case月when'4'then值else0end)as'm4'fromcookgroupby年;

这个sql的运行过程如下:

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

【本题考点】

1.考查用case语句进行数据替换,和条件判断

2.遇到行列互换的问题,可以用下面的万能模版来解决。

selectA,-- 第2步,在行列互换结果表中,其他列里的值分别使用case和max来获取max(caseBwhen'm'thenCelse0end)as'm',max(caseBwhen'n'thenCelse0end)as'n'fromcook-- 第1步,在行列互换结果表中按第1列分组groupbyA;

【举一反三】

下面是学生的成绩表(表名:成绩表,列名:学号,课程,成绩)

使用sql语句实现将该表行转化为下面的表结构:

参考答案:

select学号,-- 第2步,在行列互换结果表中,其他列里的值分别使用case和max来获取max(case课程when'语文'then成绩else0end)as语文成绩,max(case课程when'数学'then成绩else0end)as数学成绩from成绩表-- 第1步,在行列互换结果表中按第1列分组groupby学号;

输出结果:

推荐:如何从零学会sql?

相关文章

  • 行列互换问题,怎么办?送你一个万能模版

    【题目】 下面是表名为cook的表 要求查询结果如下: 【解题思路】 电影《女男变错身》中是男女互换身份 这个题其...

  • #见感思行#送你一把万能钥匙要不要?

    概念##李笑来##万能钥匙# 【卡片写作30/1000】 问题:送你一把万能钥匙要不要? 【见】 送你一把万能钥匙...

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

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

  • C语言-方阵转置

    问题描述:输入一个正整数n(1<=n<=6),根据下式生成一个nn矩阵,将该矩阵转置(行列互换)后输出。a[i][...

  • Mysql如何行列互换???

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

  • 线性代数-行列式性质

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

  • 2019-03-20

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

  • 梨花写作学习心得15

    【万能模版】种草文怎么写 种草文万能模版:使用前后的改变+推荐语+使用过程的感受 1.使用前后的改变。针对你所推荐...

  • 【行列式】5、行列式的计算

    一、复习 性质2:互换两行,行列式变号。推论1:若行列式中有两行元素完全相同,则行列式为零。 性质3:用数K乘行列...

  • JS实现行列矩阵互换

    不废话,直接上代码: 完整代码如下:

网友评论

    本文标题:行列互换问题,怎么办?送你一个万能模版

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