SQL面试题之行转列
典型的课程表:
mysql> select * from course;
+----+------------+----------+------------+
| id | teacher_id | week_day | has_course |
+----+------------+----------+------------+
| 1 | 1 | 2 | Yes |
| 2 | 1 | 3 | Yes |
| 3 | 2 | 1 | Yes |
| 4 | 3 | 2 | Yes |
| 5 | 1 | 2 | Yes |
+----+------------+----------+------------+
对于每个教师的每一天进行判断:
mysql> select teacher_id ,\
-> ( case week_day when '' then 'Yes' else '' end ) as 'mon',\
-> ( case week_day when '' then 'Yes' else '' end ) as 'tue',\
-> ( case week_day when '' then 'Yes' else '' end ) as 'thi',\
-> ( case week_day when '' then 'Yes' else '' end ) as 'thu',\
-> ( case week_day when '' then 'Yes' else '' end ) as 'fri'
-> from course\
-> ;
+------------+-----+-----+-----+-----+-----+
| teacher_id | mon | tue | thi | thu | fri |
+------------+-----+-----+-----+-----+-----+
| 1 | | Yes | | | |
| 1 | | | Yes | | |
| 2 | Yes | | | | |
| 3 | | Yes | | | |
| 1 | | Yes | | | |
+------------+-----+-----+-----+-----+-----+
这时候就能拿到每一条课程安排对于一周的影响(某一天有没有课)。
可以看到有重复数据,或者说数据比较分散,这时候可以用分组来将数据进行合并:
mysql> select teacher_id ,\
-> max( case week_day when '' then 'Yes' else '' end ) as 'mon',\
-> max( case week_day when '' then 'Yes' else '' end ) as 'tue',\
-> max( case week_day when '' then 'Yes' else '' end ) as 'thi',\
-> max( case week_day when '' then 'Yes' else '' end ) as 'thu',\
-> max( case week_day when '' then 'Yes' else '' end ) as 'fri'
-> from course\
-> group by teacher_id;
+------------+------+------+------+------+------+
| teacher_id | mon | tue | thi | thu | fri |
+------------+------+------+------+------+------+
| 1 | | Yes | Yes | | |
| 2 | Yes | | | | |
| 3 | | Yes | | | |
+------------+------+------+------+------+------+
要点:
不论是列转行还是行转列,转过去的目标肯定是被“造出来”的(case...when);
利用分组函数去重和合并。
SQL面试题之行转列的更多相关文章
- Sql server 中将数据行转列列转行(二)
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...
- Oracle中用一条Sql实现任意的行转列拼接 多行拼接
表结构和数据如下(表名Test): NO VALUE NAME 1 a 测试1 1 b 测试2 1 c 测试3 1 d 测试4 2 e 测试5 4 f 测试6 4 g 测试7 Sql语句: selec ...
- Sql server 中将数据行转列列转行(一)
在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE # ...
- SQL SERVER pivot(行转列),unpivot(列转行)
[pivot]行转列:多行变一列 假设学生成绩表Score1 Name Subject Score 小张 语文 88 小花 数学 89 小张 数学 90 Name 语文 数学 小花 null 89 小 ...
- sql里的多行多列转一行多列小技巧
---恢复内容开始--- [ 今天下午接受了一个紧急小任务,是将一组比赛记录统计出来,将象棋游戏玩家的两条记录在一行里面显示,进数据库看之后是首先想到的是行转列,但是一开始就觉得不对,后来写到一半确实 ...
- 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作
开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来, ...
- 【数据库】SQL经典面试题 - 行列转换二 - 列转行
本帖子是行转列的一个逆向操作——列转行,看下面一个面试题 面试题2: 柠檬班第30期学生要毕业了,他们的Linux.MySQL.Java成绩数据表 tb_lemon_grade_column中, 表中 ...
- 面试题:oracle数据库行转列的问题
今天我一个学弟问了一个面试题: 有表A,结构如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量 ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
随机推荐
- jsp里面不能使用${pageContext.request.contextPath}解决方案
1.在jsp中使用${pageContext.request.contextPath}获取相对路径,可是最后路径变为:http://localhost:8080/oneself/$%7BpageCon ...
- 2018.11.03 NOIP模拟 地球发动机(线性dp)
传送门 考试5分钟写完. 如果没这题今天多半爆零了(汗 直接二分出合法的转移范围. 然后用后面的状态更新前面的就可以了. 代码
- springboot深入学习(二)-----profile配置、运行原理、web开发
一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...
- UVa 10163 Storage Keepers (二分 + DP)
题意:有n个仓库,m个管理员,每个管理员有一个能力值P,每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,...),雇用的管理员的工资即为 ...
- ERR_CACHE_MISS 上一页提示确认重新提交表单
SITUATION: 设备搜索后,根据返回结果 list.php 进入特定设备的详细页面 one.php,但点击后退按钮(上一页)返回 list.php,会出现确认重新提交表单的错误页面 ERR_CA ...
- 启动Android App时,动态将Sqlite数据库文件导入到手机中类方法
package com.aqioo.db; import java.io.File; import java.io.FileOutputStream; import java.io.InputStre ...
- js实现百度搜索框滑动固定顶部
现在很多主流系统例如百度.有道.爱奇艺等的搜索框都有一个特点,滑动到刚好看不到搜索框时,固定搜索框到顶部,这也算是一个对用户友好型的操 作. 在看了百度的js和css后自己摸索出来实现效果,还是学艺不 ...
- MIT Molecular Biology 笔记3 DNA同源重组
视频 https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...
- Android: Custom View和include标签的区别
Custom View, 使用的时候是这样的: <com.example.home.alltest.view.MyCustomView android:id="@+id/customV ...
- Ubuntu下安装并配置TexStudio
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7069715.html Ubuntu下安装并配置TexStudio Ubunt ...