千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:大连千锋IT培训  >  技术干货  >  完全搞懂数据库行列转换查询

完全搞懂数据库行列转换查询

来源:千锋教育
发布人:bjq
时间: 2023-02-21 15:27:00

  一. 前言

  不知道小伙伴们发现没有,但凡面试后端开发,数据库的查询都是必问的!更有甚者,面试官会直接让我们在答题纸上手写SQL代码。其中数据库表的行列转换查询,就是很常考察的一道题目!接下来就来给大家解析一下数据库行列转换查询的实现过程,希望能够帮到你。

  二. 行转列需求展示

完全搞懂数据库行列转换查询

  我们先来看看MySQL实现行转列查询的一个需求。

  索尔老师先给大家展示一下效果图,按行查询的结果如下图所示:

  行转列后查询的结果如下图所示:

  三. 代码实现

  接下来索尔就直接给大家展示这个需求的代码实现吧。

  CREATE TABLE `test1` (

  `id` int NOT NULL,

  `name` varchar(8) DEFAULT NULL,

  `course` varchar(6) DEFAULT NULL,

  `score` int DEFAULT NULL,

  PRIMARY KEY (`id`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  INSERT INTO `test1`(id,name,course,score) VALUES

  ('1', '张三', '语文', '87'),

  ('2', '张三', '数学', '97'),

  ('3', '张三', '英语', '87'),

  ('4', '李四', '语文', '99'),

  ('5', '李四', '数学', '96'),

  ('6', '李四', '英语', '89'),

  ('7', '王五', '语文', '90'),

  ('8', '王五', '数学', '92'),

  ('9', '王五', '英语', '94');

  select name,

  max(case course when '语文' then score else 0 end)语文,

  max(case course when '数学' then score else 0 end)数学,

  max(case course when '英语' then score else 0 end)英语

  from test1 group by name;

  此处用到max函数,这主要是为了将无数据的字段设置为0,防止出现字段值为NULL造成出错异常。

  四. 列转行需求

  我们再来看看MySQL实现列转行查询的一个需求。

  现创建表test2,在未转换前查询结果如下:

  列转行的sql语句:

  select user_name,'语文' COURSE,CN_SCORE as SCORE from test2

  union select user_name,'数学' COURSE,MATH_SCORE as SCORE from test2

  union select user_name,'英语' COURSE,EN_SCORE as SCORE from test2 order by user_name,COURSE;

  列转行查询的结果如下图所示:

  五. 小结

  最后给大家总结一下,无论是行转列或者是列转行,关键就是sql子句的使用。小伙伴们可以对照代码多练习加深理解,下次再遇见类似的问题应该就不成问题啦!

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

什么是Java循环?

2023-03-30

switch语句的case和default有顺序吗?

2023-03-30

SpringBoot中使用redis 新手入门

2023-03-29

最新文章NEW

10分钟学会阿里OSS对象存储

2023-03-07

没有弹性盒,如何玩转移动端?

2023-02-13

浮动布局详解

2023-02-10

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>