行转列-列转行_查询

author author     2022-08-29     794

关键词:

开发过程中常遇到行转列或是列转行的问题,即需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示。

一、行转列:将原来同一列下多行的不同内容作为多个字段,输出对应内容

数据库表中的内容:

转换后:

解析:

  行转列是将原来的subject字段的多行内容选出来,作为结果集中的不同列,并根据code进行分组显示对应的score


 mysql> select s.name 姓名,s.code 学号,

    -> sum(if(e.subject='语文',e.score,0)) 语文成绩,

    -> sum(if(e.subject='数学',e.score,0)) 数学成绩,

    -> sum(if(e.subject='英语',e.score,0)) 英语成绩

    -> from student s

    -> left join exam e

    -> on s.code=e.code

    -> group by s.code;


  ①sum()函数是为了能够使用group by根据code进行分组,因为每一个student.code对应的exam.subject='语文'的记录只有一条,所以sum()的值就等于对应那一条记录的exam.score的值。

  (正常情况下此记录都是只有一条,当然如果有多条的话,可以使用sum()、max()、avg()、min()等聚合函数也都可以达到行转列的效果)

  ②if(e.subject='语文',e.score,0)作为条件,即对所有经过group by s.code分组的e.subject='语文'的记录的e.score字段进行SUM()、MAX()、MIN()、AVG()操作,如果e.score没有值则默认为0。

  (当然使用case when then作为条件进行信息提取也是OK的)

 

二、列转行:将sid的每个科目分数分散成一条记录显示

数据库中的表:

转换后:

解析:

    使用union all将每个sname对应的多个科目的成绩的结果集加起来


 mysql> select sname,sid,'语文' as subject,语文 as score from transcript

    -> union all

    -> select sname,sid,'数学' as subject,数学 as score from transcript

    -> union all

    -> select sname,sid,'英语' as subject,英语 as score from transcript

    -> order by sname; 


 UNION与UNION ALL的区别:

  1.对重复结果的处理:UNION会去掉重复记录,UNION ALL不会;

  2.对排序的处理:UNION会排序,UNION ALL只是简单地将两个结果集合并;

  3.效率方面的区别:因为UNION 会做去重和排序处理,因此效率比UNION ALL慢很多

sqlpivot(行转列)unpivot(列转行)apply

pivot(列转行):当我们在统计数据时,可能会用到(case字段when值Then字段end)来查询,但是这种有个问题就是查询项越多语句冗长。我们可以用pivot代替:具体使用方法:http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.htmlhttps://docs.mi... 查看详情

mysql行转列与列转行

参考技术A建表:新增数据:源数据:行转列后:建表:新增数据:源数据:列转行后: 查看详情

hivesql行转列与列转行

1.列转行1.1需求现在我们有一张统计每日用户工作量的表dws_cms_user_workload_1d,记录一个用户(uid)在一天内的审核次数(cnt)、审核字数(words)、审核视频数(videos)、审核音频数(audios):用户ID审核次数审核字数审核视频数审核音频数10001... 查看详情

sas行转列&&列转行

...aytr[1:3]chineseenglishmath;tr(i)=score;end;keepsnochineseenglishmath;run;*行转列;proctransposedata=x1out=x2name=class;bysno;varchineseenglishmath;run;datax2;setx1;arraytr[1:3]chinesee 查看详情

hive的行转列和列转行

...ist(`item_sku_id`))from  table1groupby  `order_id`;2、行转列,即table2查询出table1select  `order_id`,  `item_sku_id`from  table2lateralviewexplode(split(item_sku_id),',')astableasitem_sku_id; 查看详情

hive行转列&列转行

参考技术Ahive中行转列和列转行比较常见,一般是用于中间数据的生产。行转列一般采用IF进行判断,筛选出本列对应的数据进行统计。如果我们直接就会报错那么,我们由此引入LATERALVIEW函数对一列进行炸裂,其他列保持不变对... 查看详情

行转列/列转行

行转列:selectt.*,t.rowidfromTEST1t ID C1  C2  C31 小红 数学 10  2 小红 语文 20  3 小栏 数学 15  4小栏语文25 - 查看详情

oracle逗号分割,列转行,行转列转载(代码片段)

https://www.cnblogs.com/gdzhong/p/4726315.html?tvd SQL代码列转行selectREGEXP_SUBSTR(a.rolecode,'[^,]+',1,l)rolecodefrom(select'a,aa,aaa'rolecodefromdual)a,(SELECTLEVELlFROMDUALCONNECTBY 查看详情

hive列转行行转列

1.列转行select t.cust_id     ,concat_ws(‘,‘,collect_list(group_id))one_pace from(select  ‘A_001‘cust_id            ,‘20191014‘group_id      unionall&n... 查看详情

hivesql行列转换(行转列,列转行)(代码片段)

在Hivesql应用中会遇到“行转列”和“列转行”的场景,下面介绍其基本使用语法。1.行转列:关键字:collect_set()/collect_list()、concat_ws()1)collect_set()/collect_list():collect_set()函数只接受基本数据类型,作用是... 查看详情

sql语句列转行

参考技术A主要应用case语句来解决行转列的问题行转列问题主要分为两类1)简单的行转列问题:示例表:idsidcourseresult12005001语文80.022005001数学90.032005001英语80.042005002语文56.052005002数学69.062005002英语89.0执行selectsid,语文=isnull(sum(casecours... 查看详情

行转列,列转行,图一转图二或图二转图一(代码片段)

图一:NamCourseScorezhangsanChinese85zhangsanMaths76zhangsanEnglish80lisiChinese82lisiMaths90lisiEnglish55图二:NamChineseMathsEnglishzhangsan857680lisi829055图一转图二:SELECTNam,SUM(IF(Course=‘Chinese‘,Score,0) 查看详情

hive函数之~行转列与列转行(代码片段)

4、行转列1.相关函数说明CONCAT(stringA/col,stringB/col…):返回输入字符串连接后的结果,支持任意个输入字符串;CONCAT_WS(separator,str1,str2,...):它是一个特殊形式的CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参... 查看详情

hive关于行转列,列转行的使用

参考技术A行转列:定义:就是把形如id---------name1---------a2---------a3---------a4---------a的数据转换为id-------------name1,2,3,4---------a这里把四行的数据变成了由一行显示,这就是行转列。首先要用到的是collect_set或者collect_list,前者... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情