hiveSql 重分组聚合问题

2023-11-16

hiveSql 重分组聚合问题

问题

将下图中A表转变为B和C,即A->B A->C
在这里插入图片描述

分析

  • 1.首先看A->B,可见是将name列分组,取最大组内最大id。介绍两种求解方式:
    1)很容易想到,开窗函数first_value() over() 按照name分组取组内最大id,再按照最大id分组,聚合name即可;
    2)也容易想到直接按照name分组,求name个数,利用函数repeat按照每个name个数重复name即可,这里有连接符|有个小技巧,具体见sql实现。
  • 2.再看A->C,可见是将连续的name分为一组,取连续name分组内的最大id,很容易想到重分组解法,将不连续的部分计为1,sum() over()累加造是否是连续的分组字段,从而分组取组内最大id 和 串联拼接name

实现

  • 1.A->B:
    1)第一种分析思路解法:
select 
	flag as id
    ,concat_ws('|',collect_list(name)) as name
from(
    select id
          ,name
          ,first_value(id) over(partition by name order by cast(id as int) desc) as flag
    from tmp
	) t
group by flag

2)第二种分析思路解法:

select 
    max(id) as id
    ,regexp_replace(trim(repeat(concat(name,' '),count(1))),' ','|')as name
from tmp group by name

此处利用repeat()方法,重复name分组个数,按照空格连接,但是最后会多出一个空格,利用trim()将前后空格去除,再将空格替换为竖线连接name即可
结果:
在这里插入图片描述

  • 2.A->C:
select 
    max(t1.id) as id,
    wm_concat('|',t1.name) as name
from
    (select 
        id,name,sum(if(name = name1,0,1)) over(order by id) as flag
    from  
        (select 
            id,name,
            lag(name) over( order by id ) as name1
        from tmp
        ) t
    ) t1
group by t1.flag

结果:
在这里插入图片描述

最后

喜欢的点赞、关注、收藏吧~ 你的支持是最大的创作动力~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hiveSql 重分组聚合问题 的相关文章

  • 多列条件计数 SQL

    我正在尝试计算连续 4 个单独列中的不同条目 然后对结果求和 例如 表头看起来类似于 ID Col1 Col2 Col3 Col4 每列 保存 ID 可以有一个文本值 W X Y 或 Z 列可以有相同的值 我想做的是找出一种方法来计算列中的
  • 数据库查询的内部实现

    根据我的经验 我使用过很多查询 例如select order by wheremysql sql server oracle 等中的子句等 有那么一刻我想 1 内部是如何编写来实现上述查询的 2 他们使用哪种语言 3 那是编程语言吗 如果是
  • App Engine 日志中的 /_ah/queue/__deferred__

    我有一个使用 Google Cloud SQL 的 App Engine 应用程序 并且从我的应用程序的页面中我正在执行一些数据库操作 每当访问此页面时 它都无法执行所有数据库操作 当我进入控制台时 我看到的只是 ah queue defe
  • 按任意顺序对 SQL 行输出进行排序?

    因此 在我的数据库中 我存储乐器名称 以及各种其他属性 比方说id是主键 并且name是唯一的密钥 在 PHP 脚本中 我按仪器类别选择项目 如下所示 name mysql real escape string POST name row
  • SQL 中的模糊分组

    我需要修改 SQL 表以对稍微不匹配的名称进行分组 并为组中的所有元素分配标准化名称 例如 如果初始表如下所示 Name Jon Q John Q Jonn Q Mary W Marie W Matt H 我想创建一个新表或向现有表添加一个
  • 在 SQL 中查找日期范围重叠的记录

    我有以下表格和数据 CREATE TABLE customer wer id customer NUMBER name VARCHAR2 10 surname VARCHAR2 20 date from DATE date to DATE
  • 选择另一个表连接的每行的最小值

    我有下表 Table1 Table2 CardNo ID Record Date ID Name Dept 1 101 8 00 11 7 2013 101 Danny Green 2 101 13 00 11 7 2013 102 Tan
  • 从函数调用动态 SQL

    我正在编写一个返回表的函数 有两个参数传递给该函数 并构建并执行查询并将其插入到返回的表中 但是我收到这个错误 只能从函数内执行函数和一些扩展存储过程 我不想使用存储过程 因为这是一个简单的实用函数 有谁知道这是否可以做到 我的函数编码如下
  • SQL 查询返回按周、月和年分组的记录。没有记录的周数应返回 0

    给出以下数据 ID CreatedDate ID1 2014 06 04 01 40 56 880 ID8 2014 06 05 00 27 02 403 ID6 2014 06 04 01 51 47 060 ID7 2014 06 05
  • T-SQL 跳过获取存储过程

    我在这个网站上似乎运气不太好 但我仍然是个乐观主义者 我会继续努力 我有两个表 期刊和文章类别 使用此查询连接 SELECT Journals JournalId Journals Year Journals Title ArticleCa
  • BigQuery 中的 EXP() 返回浮点错误

    我有以下查询 SELECT EXP col FROM project dataset tablename Where col is FLOAT 但是 我收到此错误 Error Floating point error in function
  • 实体框架中的级联更新

    我有以下涉及 2 个类的场景 public class Parent Key public int Id get set Other properties here public virtual IList
  • 发生错误:“无法调用 nvarchar 上的方法。”

    我编写了一个查询来查找与特定问题相关的答案 但在运行此代码时收到此错误 无法调用 nvarchar 上的方法 select Posts Id as Answer ParentId as question User DisplayName a
  • ORA 00904 错误:无效的标识符

    我已经在虚拟 XP 中安装了 Oracle 10g 并使用以下命令创建了一个表 create table reg1 fname varchar2 30 lname varchar2 30 addr varchar2 30 mail varc
  • 为什么sql表名中通常使用下划线而不是驼峰式大小写[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 插入到表中并在 SQL 中拆分字符串

    我想将分割字符串插入到我的表中 如您所见 create table Organization organizationId bigint provienceId bigint CityId bigint TownId bigint Inse
  • Android SQLite 列.....不是唯一的

    我在 Android 上使用 SQLite 并收到此错误 02 11 18 05 37 224 E SQLiteDatabase 26583 android database sqlite SQLiteConstraintException
  • 我如何(或可以)在多个列上选择 DISTINCT?

    我需要从表中检索所有行 其中两列的组合都不同 因此 我希望同一天没有任何其他销售的所有销售都以相同的价格进行 基于日期和价格的唯一销售将更新为活动状态 所以我在想 UPDATE sales SET status ACTIVE WHERE i
  • 如何从一个 cfc 文件中函数的查询中调用另一个 CFC 文件中的函数?

    我有一个具有多种功能的 cfc 文件 info cfc 如下所示
  • 如何计算 MySQL 中日期的平均值?

    如何在 MySQL 中计算日期之间的平均值 我对时间值 小时和分钟更感兴趣 在桌子上有 date one datetime date two datetime 执行如下查询 SELECT AVG date one date two FROM

随机推荐

  • 35道SpringBoot面试题及答案

    Spring Boot 是微服务中最好的 Java 框架 我们建议你能够成为一名 Spring Boot 的专家 本文精选了三十五个常见的Spring Boot知识点 祝你一臂之力 问题一 Spring Boot Spring MVC 和
  • AODV按需路由协议

    一 详细解释 AODV Ad hoc On demand Distance Vector Routing 是一种按需路由协议 当一个节点需要给网络中的其他节点传送信息时 如果没有到达目标节点的路由 则必须先以多播的形式发出RREQ 路由请求
  • Windows Server 2008多路径 I/O 概述

    面向高可用性的多路径支持 Windows Server 2008 包括许多将运行 Windows 服务器级操作系统的计算机与存储区域网络 SAN 设备连接起来的增强功能 集成的多路径 I O MPIO 支持是为基于 Windows 的服务器
  • 升专家需要具备的6个能力!

    阅读本文大概需要2min 文 强哥 图 强哥 未经授权禁止转载 高级开发和初级开发的区别并不只有工作经验的差异 可以说如果只凭经验丰富 那还不够高级开发的标准 互联网企业一般对于技术岗都有清晰的晋升体系和对应的能力图谱 有些人可能因为某些原
  • struct结构体占内存字节数

    昨天写了一个结构体demo 心血来潮打印struct所占内存字节数 struct student char name 20 char sex int num float score 3 void print 你猜猜是多少个字节数呢 对于ch
  • PCL拼接点云数据

    1 将两个点云拼接成一个点云 1 1 输入和输出 输入 两个相同点格式的点云比如pcl PointCloud
  • JSP include能包含html页面吗?

    转自 JSP include能包含html页面吗 jsp简介 JSP全称是Java Server Pages 是一种动态网页技术 JSP其实就是在html中插入了java代码和JSP标签之后形成的文件 文件名以 jsp结尾 其实JSP就是一
  • 输入网址后,会经历哪几个步骤

    1 面试官问输入网址后 会经历哪几个步骤 DNS HTTPS TCP 就知道这两个 DNS解析 TCP连接 发送http请求 HTTP请求报文的方法是 get 如果浏览器存储了该域名下的 Cookies 那么会把 Cookies放入 HTT
  • 协议数据处理流程

    数据处理流程 总体流程 数据放入缓冲 PushToComFIFO RecBuffer BufLen 从数据缓冲中解包协议格式 读缓冲 GetDataFromComFIFO ComStr 从数据缓冲中解包协议格式 协议格式解析 Get XXX
  • python实验报告实验总结_python还能干这事

    上文提到python可以干很多事 很多时候生活中的很多问题都可以用代码解决 尤其是那些反复重复的事 今天就拿读研的时候的一个例子给大家说说 如何用代码解决生活中的问题 问题 导师带了3个班的图形学 100多号人 期末了 平时成绩已经出来了
  • web常见的攻击方式有哪些,以及如何进行防御?

    一 是什么 Web攻击 WebAttack 是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码 修改网站权限 获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要组成部分 确保Web应用程序安全十分重要
  • react组件中设置多个className

    错误写法
  • c++下的文件批量读写——查找文件的类 struct _finddata_t结构体用法

    查找文件的类 struct finddata t结构体用法 https blog csdn net yang332233 article details 53081785 但是运行原链接的代码时在while findnext handle
  • Android APP的安装路径

    小Tips app安装在哪个路径 2021 6 10更新 1 安装路径共五个 system app 系统自带的应用程序 无法删除 root后可以删除 system priv app 比system app 中的应用权限更加高 如Launch
  • DC/DC和LDO的区别是什么?以及如何选择?

    LDO是线性电源 DC DC是开关电源 SMPS 是两种不同种类电源 工作原理也不相同 开关电源和线性电源的区别 开关电源 SMPS 和低压差线性稳压电源 LDO 从模型理解原理 电源技术与新能源 面包板社区 LDO DC DC如何选型 L
  • DB2约束

    清单 1 查询数据库目录以判断哪些数据库列可为空 db2 select tabname colname nulls from syscat columns where tabschema MELNYK and nulls N 仅单独存在 惟
  • 告别BeanUtils,Mapstruct从入门到精通

    如果你现在还在使用BeanUtils 看了本文 也会像我一样 从此改用Mapstruct 对象之间的属性拷贝 之前用的是Spring的BeanUtils 有一次 在学习领域驱动设计的时候 看了一位大佬的文章 他在文章中提到使用Mapstru
  • LSB(Least Significant Bit)和MSB(Most Significant Bit)

    LSB Least Significant Bit 意为最低有效位 MSB Most Significant Bit 意为最高有效位 若MSB 1 则表示数据为负值 若MSB 0 则表示数据为正 MSB高位前导 LSB低位前导 谈到字节序的
  • MVC架构

    10 MVC 什么是MVC Model view Controller 模型视图控制器 10 1 以前的架构 用户可以直接访问控制层 控制层可以直接操作数据库 Servlet gt CURD gt 数据库 弊端 程序十分臃肿 不利于维护 S
  • hiveSql 重分组聚合问题

    hiveSql 重分组聚合问题 问题 分析 实现 最后 问题 将下图中A表转变为B和C 即A gt B A gt C 分析 1 首先看A gt B 可见是将name列分组 取最大组内最大id 介绍两种求解方式 1 很容易想到 开窗函数fir