每天一道大厂SQL题【Day33】行转列,列转行

简介: 每天一道大厂SQL题【Day33】行转列,列转行

每天一道大厂SQL题【Day33】行转列,列转行

大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题,以每日1题的形式,带你过一遍热门SQL题并给出恰如其分的解答。

一路走来,随着问题加深,发现不会的也愈来愈多。但底气着实足了不少,相信不少朋友和我一样,日积月累才是最有效的学习方式!

每日语录

学习!还是他娘地学习!

第32题 需求四:行转列,列转行

假设tableA如表5, tableB如表6,

表5

qq号(字段名:qq) 游戏(字段名:game)
10000 a
10000 b
10000 c
20000 c
20000 d
----- ----

表6

qq号(字段名:qq) 游戏(字段名:game)
10000 a_b_c
20000 c_d
create or replace temporary view tableA(qq, game) as values (10000, 'a'),
(10000, 'b'),
(10000, 'c'),
(20000, 'c'),
(20000, 'd');
create or replace temporary view tableB(qq, game) as values (10000, 'a_b_c'),
(20000, 'c_d');

请写出以下sql逻辑:

a, 将tableA输出为tableB的格式;

b, 将tableB输出为tableA的格式;

思路分析

a 使用GROUP BY语句按照qq号进行分组,然后使用COLLECT_SET函数将每个qq号对应的游戏名称收集为一个集合,最后使用CONCAT_WS函数将集合中的游戏名称用下划线连接起来。

b 使用LATERAL VIEWexplode函数将tableB中的游戏字段按照下划线进行拆分,生成多行数据,然后将拆分后的游戏字段作为新的game列输出。

答案获取

建议你先动脑思考,动手写一写再对照看下答案。

使用大厂GPT ,获取答案: https://chatgpt-plus.top/g/g-vNxYys2Bq-lun-wen-run-se-jiang-zhong-zhu-shou

参考答案适用HQL,SparkSQL,FlinkSQL,即大数据组件,其他SQL需自行修改。

加技术群讨论

点击下方卡片关注 联系我进群

文末SQL小技巧

提高SQL功底的思路。

1、造数据。因为有数据支撑,会方便我们根据数据结果去不断调整SQL的写法。

造数据语法既可以create table再insert into,也可以用下面的create temporary view xx as values语句,更简单。

其中create temporary view xx as values语句,SparkSQL语法支持,hive不支持。

2、先将结果表画出来,包括结果字段名有哪些,数据量也画几条。这是分析他要什么。

从源表到结果表,一路可能要走多个步骤,其实就是可能需要多个子查询,过程多就用with as来重构提高可读性。

3、要由简单过度到复杂,不要一下子就写一个很复杂的。

先写简单的select from table…,每个中间步骤都执行打印结果,看是否符合预期, 根据中间结果,进一步调整修饰SQL语句,再执行,直到接近结果表。

4、数据量要小,工具要快,如果用hive,就设置set hive.exec.mode.local.auto=true;如果是SparkSQL,就设置合适的shuffle并行度,set spark.sql.shuffle.partitions=4;

目录
相关文章
|
6月前
|
SQL
行转列【死磕sql】
行转列【死磕sql】
34 3
|
3月前
|
SQL JSON 分布式计算
ODPS SQL ——列转行、行转列这回让我玩明白了!
本文详细介绍了在MaxCompute中如何使用TRANS_ARRAY和LATERAL VIEW EXPLODE函数来实现列转行的功能。
|
7月前
|
SQL 关系型数据库 MySQL
SQL脚本列转行
【5月更文挑战第2天】
53 0
|
7月前
|
SQL 关系型数据库 MySQL
SQL脚本行转列
【5月更文挑战第1天】
47 0
|
7月前
|
SQL 流计算
Flink SQL提供了行转列的功能,可以通过使用`UNPIVOT`操作来实现
【1月更文挑战第1天】Flink SQL提供了行转列的功能,可以通过使用`UNPIVOT`操作来实现
536 0
|
SQL 前端开发 关系型数据库
pg库实现sql行转列
这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。
350 0
pg库实现sql行转列
|
SQL
SQL中的行转列和列转行
SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。
937 0
SQL中的行转列和列转行
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
本篇文章讲解的主要内容是:***目前Oracle支持的行列互换有两种方式:case when、pivot\unpivot,我将通过几个案例来给大家详解如何通过这两种方式实现“行转列”,“列转行”的需求,并通过执行计划看case when、pivot\unpivot二者的底层逻辑关系以及效率上的影响。***
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
|
SQL
行转列【死磕sql】
行转列【死磕sql】
169 0
行转列【死磕sql】
|
SQL
重温SQL行转列,性能又双叒提升了
重温SQL行转列,性能又双叒提升了
415 0
重温SQL行转列,性能又双叒提升了