【Hive SQL 每日一题】统计每月用户购买商品的种类分布
文章目录
- 测试数据
- 需求说明
- 需求实现
测试数据
-- 创建 orders 表
DROP TABLE IF EXISTS orders;
CREATE TABLE orders (order_id INT,user_id INT,product_id INT,order_date STRING
);-- 插入 orders 数据
INSERT INTO orders VALUES
(101, 1, 1001, '2023-01-01'),
(102, 1, 1002, '2023-01-02'),
(103, 2, 1001, '2023-01-03'),
(104, 3, 1001, '2023-01-04'),
(105, 3, 1003, '2023-01-05'),
(106, 4, 1002, '2023-01-06'),
(107, 5, 1001, '2023-01-07'),
(108, 5, 1002, '2023-01-08'),
(109, 6, 1001, '2023-01-09'),
(110, 6, 1003, '2023-01-10'),
(111, 7, 1001, '2023-01-11'),
(112, 7, 1002, '2023-01-12'),
(113, 7, 1003, '2023-01-13'),
(114, 8, 1001, '2023-01-14'),
(115, 8, 1002, '2023-01-15'),
(116, 8, 1003, '2023-01-16'),
(117, 8, 1004, '2023-01-17'),
(118, 9, 1001, '2023-01-18'),
(119, 9, 1002, '2023-01-19'),
(120, 9, 1003, '2023-01-20'),
(121, 10, 1004, '2023-01-21'),
(122, 10, 1005, '2023-01-22'),
(123, 2, 1001, '2023-02-03'),
(124, 3, 1001, '2023-02-04'),
(125, 3, 1003, '2023-02-05'),
(126, 4, 1002, '2023-02-06'),
(127, 5, 1001, '2023-02-07'),
(128, 5, 1002, '2023-02-08'),
(129, 6, 1001, '2023-02-09'),
(130, 6, 1003, '2023-02-10'),
(131, 6, 1002, '2023-02-11'),
(132, 8, 1002, '2023-02-14'),
(133, 8, 1003, '2023-02-17'),
(134, 9, 1002, '2023-02-18'),
(135, 9, 1001, '2023-02-19'),
(136, 9, 1001, '2023-02-20');-- 创建 categories 表
DROP TABLE IF EXISTS categories;
CREATE TABLE categories (category_id INT,category_name STRING
);-- 插入 categories 数据
INSERT INTO categories VALUES
(1, 'Electronics'),
(2, 'Books'),
(3, 'Clothing'),
(4, 'Home'),
(5, 'Beauty');-- 创建 products 表
DROP TABLE IF EXISTS products;
CREATE TABLE products (product_id INT,tag STRING,category_id INT
);-- 插入 products 数据
INSERT INTO products VALUES
(1001, 'Electronics', 1),
(1002, 'Books', 2),
(1003, 'Clothing', 3),
(1004, 'Home', 4),
(1005, 'Beauty', 5);
需求说明
统计每月用户购买商品的种类分布,每个用户当月的下单次数至少达到 3 次及以上才进行统计。
结果示例:
| category_name | order_month | category_month_cnt |
|---|---|---|
| Books | 2023-01 | 3 |
| Clothing | 2023-01 | 3 |
| Electronics | 2023-01 | 3 |
| Home | 2023-01 | 1 |
| Books | 2023-02 | 2 |
| Clothing | 2023-02 | 1 |
| Electronics | 2023-02 | 3 |
结果按 order_month、category_name 升序排列。
其中:
category_name表示商品种类名称;order_month表示统计的年月;category_month_cnt表示该种类商品每月的销售数量。
需求实现
selectcategory_name,date_format(order_date,"yyyy-MM") order_month,count(1) category_month_cnt
fromorders o
joinproducts p
ono.product_id = p.product_id
joincategories c
onp.category_id = c.category_id
whereconcat(o.user_id,date_format(order_date,"yyyy-MM")) in(selectconcat(user_id,date_format(order_date,"yyyy-MM"))fromordersgroup byuser_id,date_format(order_date,"yyyy-MM")havingcount(order_id) >= 3)
group byc.category_id,c.category_name,date_format(order_date,"yyyy-MM")
order byorder_month,category_name;
输出结果如下:

本题的要点在于,如何筛选出我们想要的数据。
需求说明中,要求我们统计每月各个商品种类的销售分布数据,前提是,只有当用户在当月的下单次数 >=3 时,才被作为有效数据进行统计。
所以,我们需要先过滤出每个月份符合这个条件的用户ID,由用户ID和月份构建联合键,完成过滤后,再去进行统计。
相关文章:
【Hive SQL 每日一题】统计每月用户购买商品的种类分布
文章目录 测试数据需求说明需求实现 测试数据 -- 创建 orders 表 DROP TABLE IF EXISTS orders; CREATE TABLE orders (order_id INT,user_id INT,product_id INT,order_date STRING );-- 插入 orders 数据 INSERT INTO orders VALUES (101, 1, 1001, 2023-01-01), (102, 1, 1…...
Nginx01-HTTP简介与Nginx简介(安装、命令介绍、目录介绍、配置文件介绍)
目录 HTTP简介HTTP原理查看访问网站的详细流程curl -vwget --debug 查看网站访问量HTTP协议版本HTTP协议交互HTTP 请求请求报文起始行请求头 HTTP响应响应报文起始行响应头 Nginx常见的Web服务常见网站服务 安装NginxNginx目录结构Nginx启动管理Nginx常用命令 Nginx配置文件主配…...
JAVA: 抽象类和接口
Java中可以可以定义不含方法体的方法,方法的方法体由其所在类的子类根据实际需求去实现,这样的方法称为抽象方法(Abstract Method),包含抽象方法的类必须是抽象类(Abstract Class)。 抽象方法和…...
风景的短视频一分钟:成都科成博通文化传媒公司
风景的短视频一分钟:时光凝固的画卷 在快节奏的现代生活中,我们常常被繁忙和琐碎所困扰,渴望在喧嚣中找到一丝宁静与美好。而风景的短视频,正是这样一份能够让我们在短时间内沉浸于自然之美的奇妙礼物。成都科成博通文化传媒公司…...
力扣--双指针15.三数之和
详细思路 排序数组:首先对数组 nums 进行排序,目的是为了方便后续使用双指针查找和避免重复结果。遍历数组:使用一个 for 循环从头遍历到倒数第三个元素。i 表示当前固定的元素。 跳过重复元素:如果当前元素 nums[i] 与前一个元素…...
C++ A (1020) : 幂运算
文章目录 一、题目描述二、参考代码 一、题目描述 二、参考代码 #include<bits/stdc.h> using namespace std; typedef long long ll;void qq(ll a, ll b, ll m) {if (a 0) cout << 0 << endl;;ll out 1;a % m;while (b > 0){if (b & 1)//奇数的最…...
GVM: Golang多版本管理利器
本文介绍了 Go Version Manager 的功能和使用方法,介绍了如何通过 GVM 在系统上安装和管理多个 Go 语言版本。原文: GVM: Go Version Manager, for Golang manage multiple versions Go 版本管理器(GVM,Go Version Manager)是一款…...
AlmaLinux9安装zabbix6.4
文章目录 [toc]一、配置源1)查看系统2)配置源 二、安装zabbix三、安装数据库1)卸载mariadb2)安装MySQL3)配置开启自启动4)MySQL设置root密码 四、导入数据五、配置zabbix六、参考地址六、参考地址 一、配置…...
基于翔云C#语言的身份证实名认证接口开发示例
现如今,安全与便捷成为了互联网服务的两大关键词。为了进一步提升用户体验并加强网络安全管理,国内多家主流App近日宣布完成一项重要功能升级——集成身份证实名认证系接口。这一举措标志着用户在进行App注册时,将享受到更加高效、安全的身份…...
MySQL中的redo log 和 undo log
undo log和redo log 先引入两个概念: 当我们做了一些操作 (update/delete/insert),提交事务后要操作MySql中的数据。 为了能够提升性能,引入了两块区域:内存结构和磁盘结构。 磁盘结构: 主要存储的就是数据页&#x…...
net/http与gin框架的关系分析
要想学好 gin 框架,首先要学习 net/http 服务,而二者的关系又是重中之重。 本文所要做的任务就是将二者“连接” 起来,让读者掌握其中之精髓。 一、Golang HTTP 标准库示例 使用 golang 启动 http 服务非常简单,就是一个标准的 C…...
Docker的安装、启动和配置镜像加速
前言: Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 而企业部署一般都是采用Linux操作系统,而…...
Linux系统下+jmeter分布式压测
一.配置jdk(Linux机都需配置同一个版本) 下载Linux系统的jdk,下载地址:https://repo.huaweicloud.com/java/jdk/ 下载后的jdk文件上传到 /opt目录下 进入opt目录,查看jdk文件 cd /opt ll 1.解压文件 tar xzvf jd…...
点点点还有没有做下去的必要
大家好,我是洋子,最近工作特别忙,好久没更文章了 因为组织架构调整,原先的组长调离我所在已经3年多的业务线,我就承担起组长的角色了,除了日常跟进需求测试,还跟RD、跨业务线负责人开会&#x…...
uni-app增加home图标,实现回到功能主页(九)
最近在优化一个uni-app项目,项目中有许多设备需要点检,点检完成后可以继续点检;最后导致页面跳转用的是 uni.navigateTo({ url:"/pages/dianjian/dianjian/dianjianInfo?datatype="+this.datatype }); 众所周知,这个会将页面推入堆栈中,结合…...
Android关闭硬件加速对PorterDuffXfermode的影响
Android关闭硬件加速对PorterDuffXfermode的影响 跑的版本minSdk33 编译SDK34 import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Port…...
排序-插入排序与选择排序
插入排序 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 打扑克牌整理手牌用的就是插入排序的思想 代码实现 void InsertSort(int* a, int n) { assert(a); …...
【前端每日基础】day33——响应式布局
响应式布局是一种网页设计的方法,它可以使网站在不同的设备上(如桌面电脑、平板电脑、手机等)以及不同的屏幕尺寸上呈现出最佳的显示效果。响应式布局的目标是使用户在任何设备上都能够方便地访问和浏览网站,而不需要使用不同版本…...
leetcode 2981.找出出现至少三次的最长子特殊字符串(纯哈希表暴力)
leetcode 2981.找出出现至少三次的最长子特殊字符串(传送门) class Solution { public:int maximumLength(string s) {int hash[30][52] { 0 },len 1,maxn0;char last A;for (char ch : s) {if (ch last) len;else len 1;for (int i len; i > …...
集成算法实验与分析(软投票与硬投票)
概述 目的:让机器学习效果更好,单个不行,集成多个 集成算法 Bagging:训练多个分类器取平均 f ( x ) 1 / M ∑ m 1 M f m ( x ) f(x)1/M\sum^M_{m1}{f_m(x)} f(x)1/M∑m1Mfm(x) Boosting:从弱学习器开始加强&am…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
