行列转化【附加面试题】

这篇具有很好参考价值的文章主要介绍了行列转化【附加面试题】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在MySQL中,行列转换是一种常见的操作。它包括行转列和列转行两种情况。

  1. 行转列:行转列是将表中的某些行转换成列,以提供更为清晰、易读的数据视图。例如,假设我们有一个包含科目和分数的表,我们可以使用SUM和CASE语句将每个科目的分数转换为单独的列。此外,从MySQL 8.0版本开始,还提供了PIVOT函数来实现行转列的操作。例如:
    SELECT aggregated_column, [pivot_value_1], [pivot_value_2], ..., [pivot_value_n] 
    FROM (select...) AS source_table 
    PIVOT ( aggregate_function (column_for_aggregation) 
    FOR column_for_pivot IN ([pivot_value_1], [pivot_value_2], ..., [pivot_value_n]) ) AS pivot_table;
    
  2. 列转行:列转行则是将表中的某些列转换成行,每行包含一列的值。具体的操作方法包括使用聚合函数、group_concat函数或动态SQL语句块等。例如,可以使用GROUP_CONCAT函数将某一列的值拼接成一个字符串,然后用聚合函数进行分组。
测试题:
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu`  (
  `sname` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `sub` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `score` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO `stu` VALUES ('zs', 'chinese', '100');
INSERT INTO `stu` VALUES ('zs', 'math', '99');
INSERT INTO `stu` VALUES ('zs', 'english', '98');
INSERT INTO `stu` VALUES ('li', 'chinese', '80');
INSERT INTO `stu` VALUES ('li', 'math', '89');
INSERT INTO `stu` VALUES ('li', 'english', '88');
INSERT INTO `stu` VALUES ('ww', 'chinese', '70');
INSERT INTO `stu` VALUES ('ww', 'math', '79');
INSERT INTO `stu` VALUES ('ww', 'english', '78');

SET FOREIGN_KEY_CHECKS = 1;

初始化数据: 

行列转化【附加面试题】,MySQL练习,android

现在进行行列转换:

	select sname,
	case sub when "chinese" then score end "语文",
	case sub when "math" then score end "数学",
	case sub when "english" then score end "英语"
	from stu;

 行列转化【附加面试题】,MySQL练习,android

 现在进行分组统计,然后合并:

	select sname,
	max(case sub when "chinese" then score end) "语文",
	min(case sub when "math" then score end) "数学",
	avg(case sub when "english" then score end) "英语"
	from stu
	GROUP BY sname;

行列转化【附加面试题】,MySQL练习,android

现在行列转化已经完成!

行转化为列:

小结:case [列名] when [条件] then [数据] end

面试题1:
人员情况表(employee)中字段包括,员工号(ID),姓名(name),年龄(age),文化程度(wh):
包括四种情况(本科以上,大专,高中,初中以下),
现在我要根据年龄字段查询统计出:
表中文化程度为本科以上,大专,高中,初中以下,各有多少人,占总人数多少。
结果如下A:
学历     年龄  人数  百分比
本科以上  20    34     14
大专      20    33    13
高中      20    33    13
初中以下  20    100    40
本科以上  21    50     20
。。。。。。
SQL 查询语句如何写?

create table employee(id int primary key auto_increment,
                      name varchar(20),
                      age int(2),
                      wh varchar(20)
                     ) ;

insert into employee(id,name,age,wh) values (null,'a',20,'本科以上') ;
insert into employee(id,name,age,wh) values (null,'b',20,'本科以上') ;
insert into employee(id,name,age,wh) values (null,'c',21,'本科以上') ;
insert into employee(id,name,age,wh) values (null,'d',20,'本科以上') ;
insert into employee(id,name,age,wh) values (null,'e',20,'大专') ;
insert into employee(id,name,age,wh) values (null,'e',21,'大专') ;
insert into employee(id,name,age,wh) values (null,'e',21,'高中') ;
insert into employee(id,name,age,wh) values (null,'e',20,'高中') ;
insert into employee(id,name,age,wh) values (null,'e',20,'初中以下') ;

 起始数据:

行列转化【附加面试题】,MySQL练习,android

通过wh[文化]、age[年龄]分组,即可统计出来: 

select wh '学历',age '年龄',count(*) '人数', round((count(*)/(select count(0) from employee)) * 100)  '百分比'
from employee 
GROUP BY wh ,age
ORDER BY age;

行列转化【附加面试题】,MySQL练习,android

面试题2:
-- 8:00--12:00 为迟到, 12:00--18:00 为早退
-- 打卡表 card
 create table card(
   cid int(10),
   ctime timestamp ,
   cuser int(10)
 );
 
--  人员表 person
create table person(
	pid int(10),
	name varchar(10)
) ;

-- 插入人员表的数据
insert into person values(1,'a');
insert into person values(2,'b');

-- 插入打卡的数据
insert into card values(1,'2009-07-19 08:02:00',1);
insert into card values(2,'2009-07-19 18:02:00',1);
insert into card values(3,'2009-07-19 09:02:00',2);
insert into card values(4,'2009-07-19 17:02:00',2);
insert into card values(5,'2009-07-20 08:02:00',1);
insert into card values(6,'2009-07-20 16:02:00',1);
insert into card values(7,'2009-07-20 07:02:00',2);
insert into card values(8,'2009-07-20 20:02:00',2);

--  查询 迟到 早退的员工姓名?
查询结果如下:
工号     姓名    打卡日期     上班打卡    下班打卡        迟到    早退
1         a      2009-07-19   08:02:00    18:02:00  			 是      否
1         a      2009-07-20   08:02:00    16:02:00 				 是      是
2         b      2009-07-19   09:02:00    17:02:00			   是      是

初始化表: 

 行列转化【附加面试题】,MySQL练习,android行列转化【附加面试题】,MySQL练习,android

-- 先查出每一个员工打卡的时间
select p.*,c.ctime
from person p join card c on c.cuser = p.pid;

-- 将日期格式化
select p.pid "工号",p.name "姓名",DATE_FORMAT(c.ctime,'%y-%m-%d') "打卡日期",DATE_FORMAT(c.ctime,'%h:%i:%s') "打卡时间"
from person p join card c on c.cuser = p.pid;

-- 将日期分离成上下午
select p.pid "工号",p.name "姓名",DATE_FORMAT(c.ctime,'%y-%m-%d') "打卡日期",DATE_FORMAT(c.ctime,'%h:%i:%s') "打卡时间"
from person p join card c on c.cuser = p.pid

行列转化【附加面试题】,MySQL练习,android文章来源地址https://www.toymoban.com/news/detail-800770.html

到了这里,关于行列转化【附加面试题】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【面试刷题】——C++四种类型转化

    C++支持多种类型转换操作,其中包括四种主要类型转换方式: 隐式类型转换是自动发生的类型转换,由编译器自动完成。 它用于处理不同数据类型之间的运算,例如将整数和浮点数相加时,整数会隐式地转换为浮点数。 例如,将int转换为double或将float转换为int都是隐式类型

    2024年02月07日
    浏览(32)
  • 【SQL应知应会】行列转换(二)• MySQL版

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏, 本专栏 主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle

    2024年02月11日
    浏览(40)
  • 【SQL应知应会】行列转换(一)• MySQL版

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏, 本专栏 主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 先建一个表 练习 三种插入 修改列类型 1.1为何进行行转列? 现实中用到的一

    2024年02月12日
    浏览(36)
  • 实现Android APK加固:代码加密隐藏、资源加密隐藏、so库加密隐藏。兼容unity引擎。附加固工具链接。

    0.1.可自动批量循环改包 改包包括:自动换包名(可选),自动改类,清单处理等 使用场景:原包为母包,争取处理出来的包没有容易被标记的地方 0.2.可自动批量循环加固,改包后自动加固 使用场景:原包为母包,争取处理出来的包每个包都不一样 0.3 改包加固效果 原包代码不可见,原包

    2024年02月09日
    浏览(60)
  • Android中本地图片和bitmap的相互转化

    将Bitmap转换为图片 将本地图片转为bitmap 通过流的方式 通过图片路径的方式 该方法直接传文件路径的字符串,即可将指定路径的图片读取到Bitmap对象。 如果是资源文件的话

    2024年02月12日
    浏览(34)
  • Android Studio:一个简单的米英尺单位转化app的实现过程

    📌Android Studio 专栏正在持续更新中,案例的原理图解析、各种模块分析💖这里都有哦,同时也欢迎大家订阅专栏,获取更多详细信息哦✊✊✊ ✨个人主页:零小唬的博客主页 🥂欢迎大家 👍点赞 📨评论 🔔收藏 ✨作者简介:20级计算机专业学生一枚,来自宁夏,想从事前

    2023年04月09日
    浏览(37)
  • 将mysql的脚本转化为oracle的脚本攻略

    语法差异:MySQL和Oracle SQL之间存在一些语法差异,例如日期函数、字符串处理、聚合函数等。在转换脚本时需要将这些差异进行适当的调整。 数据类型不一致:MySQL和Oracle使用不同的数据类型,因此需要确保在转换脚本时使用了正确的数据类型。 将MySQL特定的函数或转

    2024年02月14日
    浏览(33)
  • 前端面试练习24.3.5

    进入一个初始化好的vue项目 下载安装webpack相关依赖包/插件 npm install --save-dev webpack webpack-cli webpack-dev-server 安装一些相关的loader,比如vue-loader,babel-loader,css-loader等 创建webpack.config.js文件,进行相关配置 文件内容如下 初始化参数 :从配置⽂件和 Shell 语句中读取与合并参数,

    2024年03月10日
    浏览(38)
  • 24道Python面试练习题

    答:在函数式编程中,函数是基本单位,变量只是一个名称,而不是一个存储单元。除了匿名函数外,Python还使用fliter(),map(),reduce(),apply()函数来支持函数式编程。 答:匿名函数,也就是lambda函数,通常用在函数体比较简单的函数上。匿名函数顾名思义就是函数没有名字,因

    2023年04月20日
    浏览(40)
  • 【面试高频算法解析】算法练习3 双指针

    本专栏旨在通过分类学习算法,使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目,帮助您深度理解每种算法,避免出现刷了很多算法题,还是一知半解的状态 二分查找 回溯(Backtracking) 双指针 滑动窗口 深度优先搜索 广度优先搜索 贪心算法 单调

    2024年01月23日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包