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

Hive 【Hive(七)窗口函数练习】

窗口函数案例

数据准备

1)建表语句

create table order_info
(order_id     string, --订单iduser_id      string, -- 用户iduser_name    string, -- 用户姓名order_date   string, -- 下单日期order_amount int     -- 订单金额
);

2)装载语句

insert overwrite table order_info
values ('1', '1001', '小元', '2022-01-01', '10'),('2', '1002', '小海', '2022-01-02', '15'),('3', '1001', '小元', '2022-02-03', '23'),('4', '1002', '小海', '2022-01-04', '29'),('5', '1001', '小元', '2022-01-05', '46'),('6', '1001', '小元', '2022-04-06', '42'),('7', '1002', '小海', '2022-01-07', '50'),('8', '1001', '小元', '2022-01-08', '50'),('9', '1003', '小辉', '2022-04-08', '62'),('10', '1003', '小辉', '2022-04-09', '62'),('11', '1004', '小猛', '2022-05-10', '12'),('12', '1003', '小辉', '2022-04-11', '75'),('13', '1004', '小猛', '2022-06-12', '80'),('14', '1003', '小辉', '2022-04-13', '94');

需求

1)统计每个用户截至每次下单的累积下单总额

这里使用基于行的窗口函数,起点是第一行,终点是当前行,并根据每个用户id分区,根据下单日期排序;因为需求是累计下单总额,所以窗口范围是从第一行到当前行。

-- 1)统计每个用户截至每次下单的累积下单总额
select user_id,user_name,order_id,order_date,order_amount,sum(order_amount) over(partition by user_id order by order_date rows between unbounded preceding and current row ) sum_amount
from order_info;

 运行结果:

2)统计每个用户截至每次下单的当月累积下单总额

这里使用了 substring 函数,它作为 partition by 后面的第二个字段,意味着先根据 user_id 分区之后再根据 日期的 1~7 位(也就是 年份-月份)进行分区,这样就巧妙的将每个用户不同的月份可以进行窗口函数的累计求和。

select user_id,user_name,order_id,order_date,order_amount,sum(order_amount) over(partition by user_id ,substring(order_date,1,7) order by order_date rows between unbounded preceding and current row ) sum_amount
from order_info

运行结果:

3)统计每个用户每次下单距离上次下单相隔的天数(首次下单按0天算)

这里用到一个新的函数 datediff(),它是用来计算两个日期间隔的;这道题的核心在于使用 lag 函数来获取上一行的值 last_date,然后用 datediff 函数进行差值计算得到天数。

注意:lag 函数和 lead 函数是不需要声明窗口范围的。

-- 3)统计每个用户每次下单距离上次下单相隔的天数(首次下单按0天算)
select user_id,user_name,order_id,order_date,order_amount,nvl(datediff(order_date,last_date),0) diff
from (selectorder_id,user_id,user_name,order_date,order_amount,lag(order_date,1,null) over(partition by user_id order by order_date) last_datefrom order_info)t1;

运行结果: 

4)查询所有下单记录以及每个用户的每个下单记录所在月份的首/末次下单日期

这里使用了 first_value 和 last_value 函数,同样分区规则是先根据 user_id 再根据 order_date 进行分区的,其中 last_value 需要声明窗口范围,我们取从第一行到最后一行;first_value 没有声明窗口范围,则会默认按照 基于列 的窗口函数 between unbounded preceding and current row,因为我们比较的是日期,所以即使每次移动窗口也都会取小于当前日期的值。

-- 4)查询所有下单记录以及每个用户的每个下单记录所在月份的首/末次下单日期
select user_id,user_name,order_id,order_date,order_amount,first_value(order_date,false) over (partition by user_id,substring(order_date,1,7) order by order_date) first_date,last_value(order_date,false) over (partition by user_id,substring(order_date,1,7) order by order_date rows between unbounded preceding and unbounded following) last_date
from order_info;

运行结果:

5)为每个用户的所有下单记录按照订单金额进行排名

这里使用 row_number() ,order by 是根据 order_amount 进行排序,排名的结果也是按照 order_amount 排名。 

-- 5)为每个用户的所有下单记录按照订单金额进行排名
select user_id,user_name,order_id,order_date,order_amount,row_number() over (partition by user_id order by order_amount) rank
from order_info;

运行结果:

相关文章:

Hive 【Hive(七)窗口函数练习】

窗口函数案例 数据准备 1)建表语句 create table order_info (order_id string, --订单iduser_id string, -- 用户iduser_name string, -- 用户姓名order_date string, -- 下单日期order_amount int -- 订单金额 ); 2)装载语句 i…...

C++深入学习part_1

Linux下编译C程序 安装g命令:sudo apt install g 编译命令:$ g *.cc 或者 *.cpp -o fileName; hellworld 编译程序可以看到: namespace命名空间 首先,命名空间的提出是为了防止变量重名冲突而设置的。 浅浅试一下&#xff1…...

leetCode 300.最长递增子序列 (贪心 + 二分 ) + 图解 + 优化 + 拓展

300. 最长递增子序列 - 力扣(LeetCode) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如&#xff…...

Spring加载后置处理器方式之模板方法

Spring加载后置处理器方式之模板方法 1. 未使用模板方法时2. 使用模板方法后 1. 未使用模板方法时 public static void main(String[] args) {MyBeanFactory myBeanFactory new MyBeanFactory();myBeanFactory.getBean();}static class MyBeanFactory {public Object getBean(…...

【高性能计算】CUDA编程之OpenCV的应用(教程与代码-4)//test error

imread命令将返回以蓝色、绿色和红色(BGR格式)开头的三个通道 处理视频的main函数中需要做的第一件事是创建VideoCapture对象。 GPU CUDA模块中的函数都定义在cv::cuda命名空间中,将设备上配置给图像数据用的显存块作为其参数。 gettickcount…...

高德地图行政区域四级级联数据拉取;省市区县乡镇级联数据

高德地图行政区域四级级联数据拉取 高德地图行政区域级联选择 高德地图行政区域级联选择 使用以下代码拉取高德官方省市区县乡镇四级级联数据 function p(name/* 行政区域名称 */){return $.ajax({"url": "https://lbs.amap.com/_AMapService/v3/config/dis…...

Qt_基础

目录 1概述1.1 什么是QT1.2 QT的发展史1.3 支持的平台1.4 QT版本1.5 下载与安装1.6 QT的优点1.7 成功案例 2 创建 Qt 项目2.1 使用向导创建2.2 .pro文件2.3 帮助文档(QTcreator自带的)2.4 QT应用程序介绍 3 创建第一个小程序3.1 按钮的创建3.1.1 设置主窗口标题的函数3.1.2 **固…...

最新AI创作系统源码ChatGPT网站源码V2.6.3/支持Midjourney绘画/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Chat…...

UML建模语言分析和设计

UML(Unified Modeling Language,统一建模语言)是一种用于软件系统分析、设计和实现的标准化建模语言。UML提供了多种图形化工具,用于描述系统的不同方面,包括用例、类、对象、状态、活动和序列等。 在软件开发中&…...

SystemUI导航栏

SystemUI导航栏 1、系统中参数项1.1 相关开关属性2.2 属性设置代码 2、设置中设置“三按钮”导航更新流程2.1 属性资源覆盖叠加2.2 SystemUI导航栏接收改变广播2.3 SystemUI导航栏布局更新2.4 时序图 android13-release 1、系统中参数项 1.1 相关开关属性 设置->系统->…...

3d 贴图下载quixel

Quixel Megascans https://polyhaven.com/a/studio_small_03 Quixel Bridge:3D艺术家的宝库 在3D建模和渲染的世界中,找到高质量、适合项目的贴图素材至关重要。Quixel Bridge就是这样一个为3D艺术家提供大量免费贴图素材的资源库。在本文中&#xff…...

Linux权限维持

SSH 后门 软链接sshd 目标主机建立软连接: ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oport1189 #端口可以任意指定,最好伪装一下 查看端口: netstat -anlp|grep 1189 攻击机ssh登录: ssh rootx.x.x.x -p 1189 #如果root用户…...

互联网通信的核心协议HTTP和HTTPS

HTTP:超文本传输协议 HTTP,全称为超文本传输协议(Hypertext Transfer Protocol),是一种用于在Web上传输超文本文档的协议。它是Web通信的基础,允许浏览器与Web服务器之间的数据交换。HTTP使用了经典的客户…...

javaWeb网上购物系统的设计与实现

摘 要 随着计算机网络技术的飞速发展和人们生活节奏的不断加快,电子商务技术已经逐渐融入了人们的日常生活当中,网上商城作为电子商务最普遍的一种形式,已被大众逐渐接受。因此开发一个网上商城系统,适合当今形势,更加…...

MySQL 主从复制、读写分离

MySQL 主从复制、读写分离 1、MySQL 主从复制1.1什么是主从复制?1.2为什么要读写分离呢?1.3 什么时候要读写分离?1.4主从复制与读写分离1.5mysql支持的复制类型1.6主从复制的工作过程1.7MySQL 读写分离原理1.8目前较为常见的 MySQL 读写分离分…...

基于虚拟阻抗的下垂控制——孤岛双机并联Simulink仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

windows内核编程(2021年出版)笔记

1. Windows内部概览 1.1 进程 进程包含以下内容: 可执行程序,代码和数据私有的虚拟地址空间,分配内存时从这里分配主令牌,保存进程默认安全上下文,进程中的线程执行代码时会用到它私有句柄表,保存进程运…...

时序预测 | MATLAB实现EMD-iCHOA+GRU基于经验模态分解-改进黑猩猩算法优化门控循环单元的时间序列预测

时序预测 | MATLAB实现EMD-iCHOAGRU基于经验模态分解-改进黑猩猩算法优化门控循环单元的时间序列预测 目录 时序预测 | MATLAB实现EMD-iCHOAGRU基于经验模态分解-改进黑猩猩算法优化门控循环单元的时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 EMD-iCHOAGR…...

FFmpeg 命令:从入门到精通 | FFmpeg 解码流程

FFmpeg 命令:从入门到精通 | FFmpeg 解码流程 FFmpeg 命令:从入门到精通 | FFmpeg 解码流程流程图FFmpeg 解码的函数FFmpeg 解码的数据结构补充小知识 FFmpeg 命令:从入门到精通 | FFmpeg 解码流程 本内容参考雷霄骅博士的 FFmpeg 教程。 流…...

连接虚拟机工具推荐

连接虚拟机工具推荐 连接虚拟机的工具有很多种,以下是一些常用的推荐: PuTTY:这是一个非常常用的SSH和telnet客户端,适用于Windows系统。它允许你在本地机器上通过命令行接口远程登录到虚拟机。 SecureCRT:这是一个支…...

Flutter+React Native如何真正实现Lovable?跨端情感一致性开发规范(仅限内部团队流通版)

更多请点击: https://codechina.net 第一章:Lovable移动端应用开发 Lovable 是一套面向现代移动开发的轻量级跨平台框架,专为构建高响应、低资源占用且具备原生体验的应用而设计。它采用声明式 UI 编程模型,底层通过桥接机制与 i…...

扒了一个真实案例:这家律所凭什么稳坐AI搜索推荐位?

上周帮家里人查法律问题,用AI搜索"交通事故责任纠纷律所推荐",结果你猜怎么着——有家律所的名字出现了至少三次,每次都是高亮推荐。 这不是巧合。我顺着往下查,发现它在婚姻家事领域同样榜上有名。 我决定深挖一下&…...

神经纹理:让3D世界“活”起来的AI魔法,一篇讲透!

神经纹理:让3D世界“活”起来的AI魔法,一篇讲透! 引言:从“贴图”到“思考”的纹理革命 想象一下,一个虚拟角色不仅能动,其皮肤还能随着情绪微微泛红、在阳光下呈现真实的汗渍光泽——这不再是电影特效的…...

从事件关系网络看现有AI技术:一个统一的底层解释框架

在前几篇文章中,我提出了一个核心命题:智能的本质不是“知道什么”,而是“知道在发生什么”。 要实现这种智能,我们的AI系统必须从处理“实体”转向处理“事件”。事件不是孤立的存在者,而是在关系网络中确定自身意义的…...

Harness与Agent SDK的边界划分:最佳实践

Harness与Agent SDK的边界划分:最佳实践 引言 在云原生软件交付的下半场,企业面临的核心矛盾已经从「有没有工具链」变成了「能不能把工具链用出价值」。作为全球领先的软件交付平台(SDP),Harness凭借开箱即用的CI/CD、Feature Flag、混沌工程、合规治理等能力,已经成为…...

重新理解AI:从工具到可协作的助手

动手的事在减少,动脑的事在增加。从AI正式出场算起,不过短短三年多时间,许多事都在喧嚣中悄悄变化。翻看2023年的对话,无非就是和AI说句话,让它写写工作报告,分析具体的业务或数据,心底里还是把…...

STM32H743音频实战:用CubeMX和I2S驱动WM8978,从寄存器配置到代码移植避坑

STM32H743音频实战:CubeMX与I2S驱动WM8978的深度避坑指南 第一次在STM32H743上调试WM8978音频编解码器时,我盯着示波器上杂乱无章的I2S信号波形发呆了半小时。耳机里偶尔传来的爆裂声仿佛在嘲笑我的无知——这场景想必很多嵌入式音频开发者都不陌生。本文…...

跨平台macOS组件获取:系统部署专家的高效解决方案

跨平台macOS组件获取:系统部署专家的高效解决方案 【免费下载链接】gibMacOS Py2/py3 script that can download macOS components direct from Apple 项目地址: https://gitcode.com/gh_mirrors/gi/gibMacOS 在macOS系统部署和维护的复杂环境中,…...

AI大模型学习顺序_七步掌握大模型精髓:从入门到精通的进阶秘籍!

本文以“七层关系”为框架,系统地阐述了学习大模型的最佳路径。从基础概念入手,逐步深入到模型架构、训练技巧、应用场景等核心内容,旨在帮助读者构建完整的知识体系,最终实现从入门到精通的全面提升。按“七层关系”学大模型&…...

原来湖南2026年的灯光设计趋势竟然是这样的?

原来湖南2026年的灯光设计趋势竟然是这样的?随着科技的不断进步和人们生活水平的提高,灯光设计在家居和商业空间中的重要性日益凸显。湖南作为中部地区的经济大省,其灯光设计趋势也备受关注。本文将深入探讨2026年湖南灯光设计的主要趋势&…...