iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中的经典面试题——行转列(列转行)
  • 624
分享到

MySQL中的经典面试题——行转列(列转行)

mysql数据库sql 2023-10-01 11:10:48 624人浏览 安东尼
摘要

目录 1、简介:   1. 行转列(Pivot): 2. 列转行(Unpivot): 2、行转列,列转行的思想 3、实现 3.1、实现行转列 3.2、总结(行转列)实现的两种方法   3.3、实现(列转行)  3.4、

目录

1、简介:  

1. 行转列(Pivot):

2. 列转行(Unpivot):

2、行转列,列转行的思想

3、实现

3.1、实现行转列

3.2、总结(行转列)实现的两种方法  

3.3、实现(列转行) 

3.4、总结 (列转行)


1、简介:  

        在Mysql中,行转列(Pivot)和列转行(Unpivot)是用于改变数据表格布局的概念,行转列和列转行是在特定数据转换需求下使用的技术,可以帮助改变数据的呈现方式,以适应不同的分析和报告要求。具体的实现方法会因实际需求和查询的具体情况而有所不同。

1. 行转列(Pivot):

        行转列是指将原始数据表格中的行转换为列。这种操作常用于将某一列的值作为新的列名,并将对应的值填入相应的位置。例如,将某个学生在不同科目上的成绩从纵向布局转换为横向布局。

2. 列转行(Unpivot):

        列转行是指将原始数据表格中的列转换为行。这种操作常用于将多个列的值转换为一列,并将原来的列名作为新的列。例如,将不同科目的成绩从横向布局转换为纵向布局。

2、行转列,列转行的思想

        行转列:首先对于很分散的数据来说,我们的行要想把它转换为列,这就需要我们有一个和的思想,这在我们mysql学习过程中,聚合函数的分组聚合就尤为重要,所以在行转列的过程中,聚合函数,group by 分组列最为重要。也就可以通过使用聚合函数和条件语句(如`CASE WHEN`)来实现。具体实现方法因查询需求而异,一般使用`GROUP BY`进行分组和聚合。

        列转行:那么对于一个跟聚合的数据我们又如何把它拆散,拆散之后我们又该进行什么操作,这就要想到我们将打散了的数据聚合在一起,也就是使用到我们的UNION ALL,将多个查询的结果组合在一起,并在结果中添加一个代表原列名的新列。每个查询都需选择一个子集,代表一个原始列。

3、实现

3.1、实现行转列

1) 确定我们的分组列,扫视整张表,只有我们姓名没变,所以姓名作为我们的分组列,其次我们转换列,我们需要把对应的学科成绩转换成列,依次,成绩信息就作为我们的数据列

2)生成伪列

-- 生成伪列select name,       case subject when '语文' then score else null end as 'chinese',       case subject when '数学' then score else null end as 'math',       case subject when '英语' then score else null end as 'english'from stu_score;

  结果:

3)确定我们的分组列为name

4)因为我们的分组语句通常跟我们的聚合函数搭配使用

-- 通过聚合函数和分组语句:select name,max(chinese) as '语文成绩',max(math) as '数学成绩',max(english) as '英语成绩'from (select name,       case subject when '语文' then score else null end as 'chinese',       case subject when '数学' then score else null end as 'math',       case subject when '英语' then score else null end as 'english'from stu_score) tempgroup by name;

结果:

 

3.2、总结(行转列)实现的两种方法  

两步法:公式:select 分组列,      聚合函数(m1)as 列名1,      聚合函数(m2)as 列名2,      聚合函数(m3)as 列名3,from (select *,    case 转换列 when 转换列值1 then 数据列 else .... end as m1,        case 转换列 when 转换列值2 then 数据列 else .... end as m2,    case 转换列 when 转换列值3 then 数据列 else .... end as m3    from 表名)临时表名group by 分组列;一步法:公式:select 分组列,    聚合函数(case 转换列 when 转换列值1 then 数据列 else .... end) as 列名1,        聚合函数(case 转换列 when 转换列值2 then 数据列 else .... end) as 列名2,    聚合函数(case 转换列 when 转换列值3 then 数据列 else .... end) as 列名3    ...from 表名group by 分组列;

3.3、实现(列转行) 

  创建数据表:

-- 将上面的行转列的查询结果存储为学生信息的表create table stu_score_row_columns as (    select name,    max(case subject when '语文' then score else null end) as '语文',    max(case subject when '数学' then score else null end) as '数学',    max(case subject when '英语' then score else null end) as '英语'from stu_score group by name);

   结果:

   实现列转行

 -- 先获取一行的数据,其中,subject列的值始终为字符串'语文',score列的值将与stu_score_row_columns表中的语文列的值相对应。select name,'语文' as subject,语文 as 'score' from stu_score_row_columnsunion allselect name,'数学' as subject,数学 as 'score' from stu_score_row_columnsunion allselect name,'英语' as subject,英语 as 'score' from stu_score_row_columnsorder by name;

  结果:

3.4、总结 (列转行)

总结:实现列转行方法
解题步骤:
    1、确定转换列,非转换列
    2、生成新列
    3、使用union或union all来进行合并
    4、根据需要进行order by排序操作

公式:
select 非转换列,'转换列1' as 新转换列名,转换列1 as 新数据列名 from 表名
union all
select 非转换列,'转换列2' as 新转换列名,转换列2 as 新数据列名 from 表名
union all
select 非转换列,'转换列3' as 新转换列名,转换列3 as 新数据列名 from 表名  
order by ....;s

注意:

        新转换列名和新数据列名必须保持一致。

动手练习

行转列(Pivot)题目:
1.  给定一个订单表格,包含订单号(order_number)、产品名称(product_name)和销售数量(quantity)三个字段,将该表格行转列,以订单号作为列名,各产品名称对应的销售数量作为相应的值。

创建表,并插入数据:

 create table order_tab(     order_number int comment '订单号',     product_name varchar(40) comment '产品名称',     quantity int comment '销售数量' ) COMMENT '订单表';insert into order_tab(order_number, product_name, quantity) values (1,'球鞋',3),           (1,'羽毛球',3),           (3,'羽毛球',2),           (2,'球鞋',6),           (4,'矿泉水',3),           (2,'苏打水',1),           (2,'矿泉水',4);-- 确定我们的行转列select order_number '订单编号',       sum(case when product_name = '球鞋' then quantity else 0 end) as '球鞋',       sum(case when product_name = '羽毛球' then quantity else 0 end) as '羽毛球',       sum(case when product_name = '矿泉水' then quantity else 0 end) as '矿泉水',       sum(case when product_name = '苏打水' then quantity else 0 end) as '苏打水'from order_tab group by order_number order by order_number;

  结果:

列转行(Unpivot)题目:
1. 假设有一个销售数据表格,包含年份(year)、产品A的销售量(product_a_sales)和产品B的销售量(product_b_sales)两个字段,将该表格列转行,以年份为一列,并列出每个产品和对应的销售量。
2. 给定一个市场调查数据表格,包含城市名称(city_name)、产品A的需求量(product_a_demand)和产品B的需求量(product_b_demand)两个字段,将该表格列转行,以城市名称为一列,并列出每个产品和对应的需求量。

  解题2:

  数据准备:

-- 实现列转行(数据准备)create table market_servey(    city_name varchar(30) comment '城市名称',    product_a_demand int comment '产品A的需求量',    product_b_demand int comment '产品B的需求量');insert into market_servey(city_name, product_a_demand, product_b_demand) values ('贵阳',20,30),                        ('毕节',30,10),                        ('遵义',15,50),                        ('铜仁',60,10),                        ('黔东南',10,16);

 

  代码:

-- 实现列转行(列转行使用到union all)select city_name,'product_a_demand' as '产品名称',product_a_demand as '产品数量' from market_serveyunion allselect city_name,'product_b_demand' as '产品名称',product_b_demand as '产品数量' from market_serveyorder by city_name;

  结果:

来源地址:https://blog.csdn.net/qq_57492774/article/details/131690974

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中的经典面试题——行转列(列转行)

本文链接: https://www.lsjlt.com/news/422245.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中的经典面试题——行转列(列转行)
    目录 1、简介:   1. 行转列(Pivot): 2. 列转行(Unpivot): 2、行转列,列转行的思想 3、实现 3.1、实现行转列 3.2、总结(行转列)实现的两种方法   3.3、实现(列转行)  3.4、...
    99+
    2023-10-01
    mysql 数据库 sql
  • mysql 行转列
    以下是其中比较常见的几种方法: 使用GROUP_CONCAT函数 可以使用GROUP_CONCAT函数将多行数据合并为一行,并以逗号或其他分隔符进行分隔。通过SELECT语句和GROUP BY子句,可以将数据行转换为列。具体语法如下...
    99+
    2023-08-20
    mysql 数据库 sql
  • mysql 列转行
    一、列转行 mysql 数据库中,我们可能遇到将数据库中某一列的数据(多个值,按照英文逗号分隔),转化为多行数据(即一行转多行),然后join关联表,再转化为一行数据 如:有两张表,一用户表,一张学科表,需要查询学科表中的用户姓名 用...
    99+
    2023-08-31
    mysql 数据库 sql
  • mysql行转列和列转行的方法是什么
    在MySQL中,行转列和列转行通常使用以下方法来实现: 使用聚合函数和CASE语句进行行转列操作: SELECT ...
    99+
    2024-04-09
    mysql
  • MySQL中列转行和行转列总结解决思路
    目录引言列转行行转列总结引言 在学习sql中遇到了列转行和行转列的题目,这里总结一下如何在对应的情景下解决不同的题目; 列转行 创建一个表stu_score_01: SET NAMES utf8mb4; SET FORE...
    99+
    2023-01-30
    MySQL列转行和行转列 MySQL列转行 MySQL行转列
  • SQL行转列与列转行的方法
    本文小编为大家详细介绍“SQL行转列与列转行的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL行转列与列转行的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数据集+---+----------+|i...
    99+
    2023-06-29
  • Mysql行转列函数
    group_concat() 例: select oid from Test;  select group_concat(oid) from Test; 来源地址:https://blog.csd...
    99+
    2023-09-02
    mysql sql mybatis
  • MySQL行转列详情
    目录一、行转列SQL写法二、如果领导@你,让你在结果集中加上总数列呢?三、领导又双叒叕@你改需求四、结束语附录:创建表结构&测试数据SQL  MySQL行...
    99+
    2024-04-02
  • DB2行列转置的行转列是怎样的
    DB2行列转置的行转列是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。建表,并insert 2行数据CREATE TABLE Sales...
    99+
    2024-04-02
  • mysql中的行列转换方法
    这篇文章主要介绍“mysql中的行列转换方法”,在日常操作中,相信很多人在mysql中的行列转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的行列转换方法”...
    99+
    2024-04-02
  • 怎么在SQL中实现行转列和列转行
    怎么在SQL中实现行转列和列转行?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。行列转换就是如下图所示两种展示形式的互相转换行转列假如我们有...
    99+
    2024-04-02
  • 学习mysql 如何行转列与列传行
    目录一、行转列—case+groupby二、列转行——union一、行转列— case+group by mysql>...
    99+
    2024-04-02
  • mysql的行如何转为列
    这篇“mysql的行如何转为列”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql的行...
    99+
    2024-04-02
  • Python中xlsx文件转置操作详解(行转列和列转行)
    目录1.原始数据是这样的2.脚本如下:3.运行脚本后生成的xlsx文件,如下:附:pivot方法即可完成行转列哦总结1.原始数据是这样的 2.脚本如下: import pandas...
    99+
    2024-04-02
  • sql多表行转列和级联行转列的方法
    本篇内容主要讲解“sql多表行转列和级联行转列的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql多表行转列和级联行转列的方法”吧!现有两表A,B A表存...
    99+
    2024-04-02
  • pandas如何优雅的列转行及行转列详解
    目录一、列转行1、背景描述2.方法描述2.1 方法12.2 方法22.3 方法32.4 方法43 思考与总结4 思维延伸4.1 例子14.2 例子2二、行转列1.准备数据2.行转列实...
    99+
    2024-04-02
  • mysql实现行转列的方法
    这篇文章主要介绍mysql实现行转列的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql实现行转列的方法:1、用cross join的方式实现,代码为【cross join...
    99+
    2024-04-02
  • MySQL中行转列、列转行、连接字符串 concat、concat_ws、group_concat函数怎么用
    这篇文章主要介绍MySQL中行转列、列转行、连接字符串  concat、concat_ws、group_concat函数怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!...
    99+
    2024-04-02
  • mysql行转列的方法有哪些
    在MySQL中,可以使用以下方法将行转列: 使用CASE语句:使用多个CASE语句将多行数据转换为单行。每个CASE语句对应一个列...
    99+
    2024-04-09
    mysql
  • MySQL行转列的方法是什么
    本篇内容介绍了“MySQL行转列的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,我们看一下咱们的测试表数据和预期查询的结果:...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作