当前位置: 首页 > news >正文

SQL进阶技巧:如何不使用union all进行行转列?【三种方法实现】

目录

0 前言

1 需求描述

 2 数据准备

3 数据分析

   3.1 lateral view explode(array()) 方法

   3.2 使用stack()方法

   3.3  lateral view inline(array(struct<>))

4 小结


0 前言

       行转列一直是SQL开发常见的数据结构转换方式,一般最普遍的方法就是采用union all的形式,但这种方式代码重复片段太多,写法不够优雅。本文采用hive sql的形式给出了三种行转列的方法,分别利用hive中的explode()、inline()、及stack()函数进行转换。

      这里首先声明,行转列与列转行的定义,主要是以矩阵转置的概念来看,我们把多列组成的一行数据称为行向量,把该行向量变换为多行一列(列向量)的过程称为行转列,相反的把列向量(多行一列)转换为行向量(多列一行)的过程称为列转行。那么有同学会问在hive中,经常会把多行数据按照指定的分隔符合并成一列,这种也属于列转行吗?为了区分,我们统一把这种操作方式叫多行转一行,或者叫数据合并过程(collect_list()),而把该过程的逆过程称为一行转多行,或称为数据展开过程(explode(),flatmap())。

1 需求描述

已知学生成绩表如下,分别有三个科目英语、数学、历史&#


http://www.mrgr.cn/news/1949.html

相关文章:

  • 有效的括号---力扣
  • 基于Spring Boot的高效宠物购物平台
  • 景联文科技:一文详解如何构建高质量SFT数据
  • 大话C语言:第41篇 结构体与函数的关系
  • 云原生 | Kubernetes 之常用 CNI 网络插件简述与对比
  • 保存数据至后台表
  • Java 安全编程:揭秘加密与解密的艺术
  • 未开启语音助手时,远程控制功能助你快速在家找回手机!
  • C语言 【自定义类型——结构体】(详细)
  • [C#]winform基于深度学习算法MVANet部署高精度二分类图像分割onnx模型高精度图像二值化
  • 人工智能缺陷检测方案METIS(梅迪斯):汽车零部件检测
  • MySQL单表条件查询语句
  • 【页面提取】将搜索到的内容进行截屏保存,搜索到的标题及链接输出到电子表格
  • 探索 Resolume Arena 7 - 引领 VJ 音视频创作的卓越软件
  • 【AI学习】LLaMA模型的微调成本有几何?
  • spark client mode cluster mode 区别 与选择
  • C#中的S7协议
  • python_tutorials_t1,print input操作
  • JMeter常见的高频面试题整理
  • 【前缀和算法】--- 一维和二维前缀和模板