【Hive SQL 每日一题】统计指定范围内的有效下单用户

文章目录

    • 测试数据
    • 需求说明
    • 需求实现

前言:本题制作参考牛客网进阶题目 —— SQL128 未完成试卷数大于1的有效用户

测试数据

-- 创建用户表
DROP TABLE IF EXISTS users;
CREATE TABLE users (user_id INT,name STRING,age INT,gender STRING,register_date STRING
);-- 插入用户数据
INSERT INTO users VALUES
(1, 'Alice', 23, 'F', '2023-01-01'),
(2, 'Bob', 22, 'M', '2023-02-01'),
(3, 'Cathy', 24, 'F', '2023-03-01'),
(4, 'David', 23, 'M', '2023-04-01'),
(5, 'Eve', 25, 'F', '2023-05-01'),
(6, 'Frank', 26, 'M', '2023-06-01'),
(7, 'Grace', 27, 'F', '2023-07-01'),
(8, 'Hank', 28, 'M', '2023-08-01'),
(9, 'Ivy', 29, 'F', '2023-09-01'),
(10, 'Jack', 30, 'M', '2023-10-01');-- 创建订单表
DROP TABLE IF EXISTS orders;
CREATE TABLE orders (order_id INT,user_id INT,product_id INT,order_date STRING,status STRING
);-- 插入订单数据
INSERT INTO orders VALUES
(101, 1, 1001, '2023-01-01', 'completed'),
(102, 1, 1002, '2023-01-01', 'pending'),
(103, 2, 1001, '2023-01-02', 'completed'),
(104, 3, 1001, '2023-01-03', 'pending'),
(105, 3, 1003, '2023-01-04', 'completed'),
(106, 4, 1002, '2023-01-02', 'completed'),
(107, 5, 1001, '2023-01-03', 'completed'),
(108, 5, 1002, '2023-01-04', 'pending'),
(109, 5, 1002, '2023-01-05', 'pending'),
(110, 5, 1003, '2023-01-06', 'pending'),
(111, 5, 1003, '2023-01-07', 'pending'),
(112, 6, 1001, '2023-01-08', 'completed'),
(113, 6, 1002, '2023-01-08', 'pending'),
(114, 6, 1003, '2023-01-08', 'pending'),
(115, 6, 1004, '2023-01-09', 'pending'),
(116, 6, 1005, '2023-01-10', 'completed'),
(117, 7, 1001, '2023-01-11', 'completed'),
(118, 7, 1002, '2023-01-11', 'pending'),
(119, 7, 1003, '2023-01-12', 'pending'),
(120, 7, 1004, '2023-01-12', 'pending'),
(121, 7, 1005, '2023-01-13', 'pending'),
(122, 8, 1001, '2023-01-14', 'completed'),
(123, 8, 1002, '2023-01-14', 'completed'),
(124, 8, 1003, '2023-01-15', 'completed'),
(125, 8, 1004, '2023-01-15', 'pending'),
(126, 8, 1005, '2023-01-16', 'pending'),
(127, 9, 1001, '2023-01-17', 'completed'),
(128, 9, 1002, '2023-01-17', 'completed'),
(129, 9, 1003, '2023-01-18', 'completed'),
(130, 9, 1004, '2023-01-18', 'completed'),
(131, 9, 1005, '2023-01-19', 'completed'),
(132, 10, 1001, '2023-01-20', 'pending'),
(133, 10, 1002, '2023-01-20', 'pending'),
(134, 10, 1003, '2023-01-21', 'pending'),
(135, 10, 1004, '2023-01-21', 'pending'),
(136, 10, 1005, '2023-01-22', 'pending');

需求说明

统计 2023 年每个有效用户的数据(有效用户指完成订单数至少为 1 且未完成订单数小于 5),输出用户ID、用户名称、未完成订单数、完成订单数、购买过的商品ID集合,按用户ID升序排列。

orders 表中的 status 列标识用户订单的状态,共有两种:

  • pending:未完成;

  • completed:已完成。

结果示例:

user_idnamepending_orderscompleted_ordersproduct_ids
1Alice11[“2023-01-01:1001”,“2023-01-01:1002”]
2Bob01[“2023-01-02:1001”]
3Cathy11[“2023-01-03:1001”,“2023-01-04:1003”]
4David01[“2023-01-02:1002”]
5Eve41[“2023-01-03:1001”,“2023-01-04:1002”,“2023-01-05:1002”,“2023-01-06:1003”,“2023-01-07:1003”]
6Frank32[“2023-01-08:1001”,“2023-01-08:1002”,“2023-01-08:1003”,“2023-01-09:1004”,“2023-01-10:1005”]
7Grace41[“2023-01-11:1001”,“2023-01-11:1002”,“2023-01-12:1003”,“2023-01-12:1004”,“2023-01-13:1005”]
8Hank23[“2023-01-14:1001”,“2023-01-14:1002”,“2023-01-15:1003”,“2023-01-15:1004”,“2023-01-16:1005”]
9Ivy05[“2023-01-17:1001”,“2023-01-17:1002”,“2023-01-18:1003”,“2023-01-18:1004”,“2023-01-19:1005”]

其中:

  • user_id:用户ID;
  • name:用户名;
  • pending_orders:未完成订单数;
  • completed_orders:完成订单数;
  • product_ids:每个用户下单的所有日期和产品ID组成的列表。

需求实现

selectu.user_id,name,pending_orders,completed_orders,product_ids
from(selectuser_id,sum(if(status = "pending",1,0)) pending_orders,sum(if(status = "completed",1,0)) completed_orders,collect_list(concat_ws(":",date_format(order_date,"yyyy-MM-dd"),cast(product_id as string))) product_idsfromorderswhereyear(order_date) = "2023"group byuser_id)t1joinusers uont1.user_id = u.user_id
wherecompleted_orders >= 1 and pending_orders < 5
order byu.user_id;

输出结果如下:

在这里插入图片描述

范围筛选统计的需求比较简单,只需要在分组的统计的时候进行判断即可。

本题稍有难度的地方在于,如何将各个用户的下单日期与对应的产品ID进行组合,形成列表,也就是列转行。

在 Hive 中列转行有两个函数:

  • collect_list:传入一个参数(字段),根据分组,对该字段进行聚合,形成列表;

  • collect_set:和上面一样,但它的不同之处在于,会对组合的列表数据进行去重操作。

在 MySQL 中并没有这两个函数,但是有和它们功能类似的函数 group_concat

GROUP_CONCAT(expr SEPARATOR sep)-- 示例
group_concat(start_day SEPARATOR ';')

其中,expr 表示要连接的表达式,可以是列名、常量或者更复杂的表达式。SEPARATOR sep 是一个可选参数,用于指定连接字符串的分隔符,默认为逗号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/338641.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM背后的基础模型2:Transformer的组成模块

Transformer是一种先进的语言模型&#xff0c;它在预测下一个单词或标记方面与传统的语言模型有所不同&#xff0c;但仍然遵循相同的基本原理。Transformer通过一系列复杂的步骤&#xff0c;将输入的标记序列转换为能够进行预测的丰富向量序列。 在Transformer中&#xff0c;输…

MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

一、找不到my.ini配置文件 MySQL 8 安装或启动过程中&#xff0c;如果系统找不到my.ini文件&#xff0c;通常意味着 MySQL服务器没有找到其配置文件。在Windows系统上&#xff0c;MySQL 8 预期使用my.ini作为配置文件&#xff0c;而不是在某些情况下用到的my.cnf文件。 通过 …

极简网络用户手册(1)

极简网络系统处理流程 模块位置&#xff1a;参数平台--专题分析--极简网络分析 步骤&#xff1a; 步骤一&#xff1a;创建精细化场景策略 步骤二&#xff1a;创建任务&#xff0c;主要选择策略&#xff08;包括√配置和距离配置&#xff09;和需要处理的小区清单&#xff08;源…

曲面细分技术在AI去衣中的创新应用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域的应用日益广泛。其中&#xff0c;AI去衣技术因其独特的应用场景而备受瞩目。在这一技术的发展过程中&#xff0c;曲面细分技术发挥了至关重要的作用。本文将深入探讨曲面细分技术在AI去衣中的作用及其…

Java Web基础知识(Servlet、Cookie、Session、Filter、Listener)

文章目录 Servlet什么是Servlet&#xff1f;Servlet的生命周期ServletConfig对象ServletContext对象Servlet请求转发和重定向Servlet请求转发&#xff08;forward和include&#xff09;Servlet重定向&#xff08;redirect&#xff09;重定向和转发的区别? 读取文件、下载文件 …

STM32作业实现(一)串口通信

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

Notepad++ 常用

File Edit search view Encoding Language Settings Tools Macro Run Plugins Window 文件 编辑 搜索 视图 编码 语言 设置 工具 宏 运行 插件 窗口 快捷方式 定位行 &#xff1a;CTRL g查找&#xff1a; CTRL F替换&am…

Photoshop 首选项设置建议

Windows Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K macOS Ps菜单&#xff1a;Photoshop/首选项 Photoshop/Preferences 快捷键&#xff1a;Cmd K 对 Photoshop 的首选项 Preferences进行设置&#xff0c;可以提高修图与设计效率。下面是一些…

[数据集][目标检测]猕猴桃检测数据集VOC+YOLO格式1838张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1838 标注数量(xml文件个数)&#xff1a;1838 标注数量(txt文件个数)&#xff1a;1838 标注…

SpringBoot整合jasypt加密配置文件敏感信息

SpringBoot整合jasypt加密配置文件敏感信息 在项目中我们需要对配置文件的一些敏感信息进行加密处理&#xff0c;比如数据库账户密码&#xff0c;避免直接暴露出来&#xff0c;这种场景常常用于生产环境&#xff0c;我们不想让开发人员知道生产库的密码&#xff0c;有运维人员…

springboot基础及上传组件封装

简介 本文主要以文件上传为demo&#xff0c;介绍了一些 springboot web 开发的入门的技术栈。 对应刚接触 springboot 的可以参考下。 主要包括文件md5比对、生成图片缩略图、数据库迁移、文件记录持久化、请求全局异常处理等功能。 准备工作 在 idea 中创建项目&#xff…

spring分析工具_springboot startup analyze的部署和使用

工具是开源工具 ,可以放心使用 我是从开源中国OCSChina看到的顺便安利一下 部署 教程 https://github.com/linyimin0812/spring-startup-analyzer 直接下载地址 https://github.com/linyimin0812/spring-startup-analyzer/releases/download/v3.0.0/spring-startup-analyzer.…

c++------类和对象(下)包含了this指针、构造函数、析构函数、拷贝构造等

文章目录 前言一、this指针1.1、this指针的引出1.2、 this指针的特性 二、类的默认的六个构造函数2.1、构造函数简述2.2构造函数 三、析构函数3.1、析构函数引出3.2、特点&#xff1a; 四、拷贝构造4.1、引入4.2、特征&#xff1a;4.3、默认拷贝构造函数 总结 前言 在本节中&a…

BUUCTF中的密码题目解密

BUUCTF 1.MD5 题目名称就是MD5&#xff0c;这个题目肯定和md5密码有关&#xff0c;下载题目&#xff0c;打开后发现这确实是一个md5加密的密文 Md5在线解密网站&#xff1a;md5在线解密破解,md5解密加密 经过MD5在线解密网站解密后&#xff0c;获取到flag为&#xff1a;flag{…

burp插件new_xp_capcha识别验证码的简易安装

1.new_xp_capcha 插件是大佬开发的可以正常白嫖&#xff0c;感谢大佬&#xff0c;我找了个不需要任何高级操作就可以做的安装手法&#xff0c;因为我在网上搜了一下就发现这个的安装过程攻略都还蛮复杂&#xff0c;我这里用了个简单的手法 2.安装 下载地址&#xff1a;smxia…

【软件设计师】2022年上半年真题解析

​​冯诺依曼计算机体系结构的基本特点是&#xff1a; A. 程序指令和数据都采用二进制表示 - 这是正确的&#xff0c;因为冯诺依曼架构下的计算机使用二进制形式来表示和处理所有信息&#xff0c;包括指令和数据。 B. 程序指令总是存储在主存中&#xff0c;而数据则存储在高速…

二维数组传参时不用二级指针接收

先放结论&#xff1a; 1. 二维数组数组名指向的类型是 int [x] 类型&#xff0c;int** 指针指向类型是 int* &#xff0c;如果用二级指针接收会导致访问错误&#xff0c;因为 int [x] 类型和 int* 类型不同。 2. 指向什么类型的指针1就按照该类型的字节数1移动。 最近在学…

Kafka 集群 KRaft 模式搭建

一、Kafka 集群 KRaft 介绍 Kafka的KRaft模式是一种新的元数据管理方式&#xff0c;旨在去除对ZooKeeper的依赖&#xff0c;使Kafka成为一个完全自包含的系统。在Kafka的传统模式下&#xff0c;元数据管理依赖于ZooKeeper&#xff0c;这增加了部署和运维的复杂性。为了解决这个…

MySQL—函数(介绍)—字符串函数(基础)

一、引言 提到函数&#xff0c;在SQL分类中DQL语句中有一个聚合函数&#xff0c;如COUNT()、SUM()、MAX()等等。这些都是一些常见的聚合函数&#xff0c;而聚合函数只是函数的一种&#xff0c;接下来会详细的学习和介绍一下函数的应用场景和以及 mysql 当中文件的函数有哪些。 …

大学生Python自救课程总结

因为一些事情的缘故&#xff0c;我已经几乎没有更新很久了&#xff0c;然后现在快到期末了&#xff0c;不知道各位学习python的同志们慌不慌【坏笑】。 本学期&#xff0c;我只是简单的讲了讲python的基础用法。当然&#xff0c;可能有些地方总结的并不全面&#xff0c;很多知…