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

简介:

【题目】

下面是表名为cook的表

要求查询结果如下:

【解题思路】

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

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

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

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

select 年,m1,m2,m3,m4
from cook;

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

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

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

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

select 年,
(case 月 when '1' then 值 else 0 end) as m1,
(case 月 when '2' then 值 else 0 end) as m2,
(case 月 when '3' then 值 else 0 end) as m3,
(case 月 when '4' then 值 else 0 end) as m4
from cook;

select 年,
max(case 月 when '1' then 值 else 0 end) as 'm1',
max(case 月 when '2' then 值 else 0 end) as 'm2',
max(case 月 when '3' then 值 else 0 end) as 'm3',
max(case 月 when '4' then 值 else 0 end) as 'm4'
from cook
group by 年;

这个sql的运行过程如下:

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

【本题考点】

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

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

select A,
-- 第2步,在行列互换结果表中,其他列里的值分别使用case和max来获取
max(case B when 'm' then C else 0 end) as 'm',
max(case B when 'n' then C else 0 end) as 'n'
from cook
-- 第1步,在行列互换结果表中按第1列分组
group by A;

【举一反三】

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

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

参考答案:

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

输出结果:

推荐:如何从零学会sql?

相关文章
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序4
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序4
43 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序1
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序1
44 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序3
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序3
54 0
|
前端开发
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序2
前端学习笔记202305学习笔记第二十八天-数组结构之列表拖拽改变顺序2
55 0
|
机器学习/深度学习 搜索推荐 算法
编程艺术 - 第二章 、俩个字符串是否包含问题以及扩展
编程艺术 - 第二章 、俩个字符串是否包含问题以及扩展
67 0
|
JavaScript API 容器
彻底弄懂元素样式、位置、大小相关计算
在我们日常开发中偶尔会碰到获取元素样式、设置某元素样式、计算元素位置、计算滚动距离等需求。但是js中关于元素位置、样式、大小的api种类繁多,稍不留神就会搞不清楚。今天笔者就带你彻底弄清楚,让你在这类问题上不再迷茫。
215 0
|
Shell
shell编程之双重循环(教你花式打印各种图形)(下)
1、双重循环概述 双重循环需要具备的前提——存在两个以上的自变量。 执行机制:
296 0
|
Shell
shell编程之双重循环(教你花式打印各种图形)(上)
1、双重循环概述 双重循环需要具备的前提——存在两个以上的自变量。 执行机制:
694 0
|
索引 关系型数据库 MySQL
十六、组合索引(上)
十六、组合索引
87 0
|
SQL XML JSON
从零开始实现放置游戏(四)——实现后台管理系统(2)数值配置的增删查改
 上一章我们将RMS后台管理系统搭建完毕,本章我们就在这个系统上实现录入游戏配置的功能。目前我们需要配置四项,每个等级的人物属性,每个等级的升级经验,游戏地图,地图中的怪物。下面我们以游戏地图配置为例子,实现对它的增删查改功能。
从零开始实现放置游戏(四)——实现后台管理系统(2)数值配置的增删查改