Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >sparksql-pivot子句介绍

sparksql-pivot子句介绍

作者头像
数据仓库晨曦
发布于 2024-09-10 13:07:15
发布于 2024-09-10 13:07:15
15100
代码可运行
举报
文章被收录于专栏:数据仓库技术数据仓库技术
运行总次数:0
代码可运行

今天给大家带来spark的一个新的知识点,pivot,这个不是函数,是一个子句。

描述

PIVOT 子句用于数据透视。我们可以根据特定列的值获取聚合值,这些值将转变成在 SELECT 子句中使用的多个列。PIVOT 子句可以在表名或子查询之后指定。

语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PIVOT ( { aggregate_expression [ AS aggregate_expression_alias ] } [ , ... ]
    FOR column_list IN ( expression_list ) )

参数

  • aggregate_expression 一个聚合表达式(例如 sum(a),count(distinct b) 等等
  • aggregate_expression_alias 聚合表达式的别名
  • column_list 包含 FROM 子句中的列,这些列是我们想要用新列替换的列。我们可以使用括号来包围这些列,例如 (c1, c2)。
  • expression_list 指定新列,这些新列用于将 column_list 中的值作为聚合条件进行匹配。我们还可以为它们添加别名。

样例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE person (id INT, name STRING, age INT, class INT, address STRING);
INSERT INTO person VALUES
    (100, 'John', 30, 1, 'Street 1'),
    (200, 'Mary', NULL, 1, 'Street 2'),
    (300, 'Mike', 80, 3, 'Street 3'),
    (400, 'Dan', 50, 4, 'Street 4');

SELECT * FROM person
    PIVOT (
        SUM(age) AS a, AVG(class) AS c
        FOR name IN ('John' AS john, 'Mike' AS mike)
    );
+------+-----------+---------+---------+---------+---------+
|  id  |  address  | john_a  | john_c  | mike_a  | mike_c  |
+------+-----------+---------+---------+---------+---------+
| 200  | Street 2  | NULL    | NULL    | NULL    | NULL    |
| 100  | Street 1  | 30      | 1.0     | NULL    | NULL    |
| 300  | Street 3  | NULL    | NULL    | 80      | 3.0     |
| 400  | Street 4  | NULL    | NULL    | NULL    | NULL    |
+------+-----------+---------+---------+---------+---------+

SELECT * FROM person
    PIVOT (
        SUM(age) AS a, AVG(class) AS c
        FOR (name, age) IN (('John', 30) AS c1, ('Mike', 40) AS c2)
    );
+------+-----------+-------+-------+-------+-------+
|  id  |  address  | c1_a  | c1_c  | c2_a  | c2_c  |
+------+-----------+-------+-------+-------+-------+
| 200  | Street 2  | NULL  | NULL  | NULL  | NULL  |
| 100  | Street 1  | 30    | 1.0   | NULL  | NULL  |
| 300  | Street 3  | NULL  | NULL  | NULL  | NULL  |
| 400  | Street 4  | NULL  | NULL  | NULL  | NULL  |
+------+-----------+-------+-------+-------+-------+
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQL多维分析
早在 1993年,关系数据库之父 E.F.Codd[1] 提出了 OLAP 概念,不遗余力指出面向记录的OLTP关系型数据库从根本上不适合查询分析的需求。
Yiwenwu
2024/07/07
7230
SQL多维分析
5分钟学会SQL SERVER PIVOT操作
PIVOT 通过将表达式中的一个列的唯一值转换为输出中的多列(即行转列),来轮替表值表达式。PIVOT 在需要对最终输出所需的所有剩余列值执行聚合时运行聚合。与 PIVOT 执行的操作相反,UNPIVOT 将表值表达式的列轮换为行(即列转行)。
fireWang
2020/03/25
8.5K0
5分钟学会SQL SERVER PIVOT操作
sql数据转换
常用语句 --查询是否有空值 select * from iteminfo where 主供应商 = '' or 主供应商 is null --查询字段是否超出长度 select * from iteminfo where len(单位)>20
学派客
2023/04/07
9030
SELECT 语句与其子句的详解
SELECT 从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
jack.yang
2025/04/05
2750
SQL命令 SELECT(三)
列别名在结果集中显示为列标题。指定列别名是可选的;始终提供默认值。列别名以指定的字母大小写显示;但是,当在ORDER BY子句中引用时,它不区分大小写。C别名必须是有效的标识符。C别名可以是分隔的标识符。使用带分隔符的标识符允许列别名包含空格、其他标点符号或作为SQL保留名称。例如,SELECT Name AS "Customer Name" or SELECT Home_State AS "From"。
用户7741497
2022/05/06
2.4K0
PySpark入门级学习教程,框架思维(中)
在讲Spark SQL前,先解释下这个模块。这个模块是Spark中用来处理结构化数据的,提供一个叫SparkDataFrame的东西并且自动解析为分布式SQL查询数据。我们之前用过Python的Pandas库,也大致了解了DataFrame,这个其实和它没有太大的区别,只是调用的API可能有些不同罢了。
Sam Gor
2021/04/26
4.5K0
用SQL代替DSL查询ElasticSearch怎样?
如果你和我一样「熟悉SQL,但不咋会写DSL」 or 「想要用SQL简化查询」,本文会介绍一下官方对ES SQL的支持,希望对你有所帮助~
用户4172423
2020/09/22
1.8K0
用SQL代替DSL查询ElasticSearch怎样?
原 SparkSQL语法及API
SparkSQL语法及API 一、SparkSql基础语法 1、通过方法来使用 1.查询 df.select("id","name").show(); 1>带条件的查询 df.select($"id",$"name").where($"name" === "bbb").show() 2>排序查询     orderBy/sort($"列名")  升序排列     orderBy/sort($"列名".desc)  降序排列     orderBy/sort($"列1" , $"列2".desc) 按两列排序
云飞扬
2018/05/17
1.6K0
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
在当今的大数据时代,数据库技术的选择对于企业的信息化发展至关重要。OceanBase作为一种高性能、高可用的分布式关系数据库,在与MySQL模式的兼容性方面展现出了显著的优势,为企业数据迁移、整合与升级提供了极大的便利。
公众号:码到三十五
2024/05/06
8460
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
超实用!Hive日常操作必会,学会事半功倍。
会对输入做全局排序,因此只有一个 reducer,因为多个 reducer 无法保证全局有序,当只有一个 reducer 时,会导致当输入规模较大时,耗费较长的计算时间。
Wu_Candy
2022/07/05
6560
sql server 行转列 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
乔达摩@嘿
2020/09/11
1.8K0
MADlib——基于SQL的数据挖掘解决方案(7)——数据转换之其它转换
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/79008881
用户1148526
2019/05/25
3.2K0
SQLite Like 子句
SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:
子润先生
2021/07/01
7780
【MySQL】表的基本查询
表的增删查改,简称表的 CURD 操作 : Create(创建),Update(更新),Retrieve(读取),Delete(删除).
YoungMLet
2024/03/01
6640
【MySQL】表的基本查询
sql聚合函数_SQL聚合函数
SQL Aggregate Functions basically operate on multiple columns to perform the operations and serve to represent the output as an entity representing the operation executed.
全栈程序员站长
2022/06/24
2.5K0
sql聚合函数_SQL聚合函数
SQLserver基础语句大全[通俗易懂]
结构化查询语言(Structured Query Language)简称 SQL,是一种特殊目的的编程语言, 是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统; 同时也是数据库脚本文件的扩展名。
全栈程序员站长
2022/08/22
3.9K0
sparksql-unpivot子句介绍
今天给大家带来spark的一个新的知识点,UNPIVOT,这个不是函数,是一个子句。
数据仓库晨曦
2024/09/11
1380
sparksql-unpivot子句介绍
SQL命令 ORDER BY(一)
ORDER BY子句根据指定列的数据值或以逗号分隔的列序列对查询结果集中的记录进行排序。 该语句对单个结果集进行操作,这些结果集要么来自SELECT语句,要么来自多个SELECT语句的UNION。
用户7741497
2022/05/06
2.9K0
【数据库】MySQL:从基础到高级的SQL技巧
上篇文章是对MySQL的简单介绍和基本操作,接下来会对MySQL数据查询最更进一步的讲解。
易辰君
2024/11/07
3640
【MySQL 系列】MySQL 语句篇_DQL 语句
DQL(Data Query Language),即数据查询语言,用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。
栗筝i
2024/03/19
9280
【MySQL 系列】MySQL 语句篇_DQL 语句
相关推荐
SQL多维分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验