HQL面试题练习 —— 品牌营销活动天数

题目来源:小红书

目录

  • 1 题目
  • 2 建表语句
  • 3 题解

1 题目

有营销活动记录表,记录了每个品牌每次营销活动的开始日期和营销活动的结束日期,现需要统计出每个品牌的总营销天数。

注意:
1:苹果第一行数据的营销结束日期比第二行数据的营销开始日期要晚,这部分有重叠的日期的要去重计算。
2:苹果第二行数据的营销结束日期和第三行的开始日期不连续,2019-09-07以及2019-09-08不统计到营销天数中。

样例数据

+--------+-------------+-------------+
| brand  | start_date  |  end_date   |
+--------+-------------+-------------+
| 华为   | 2018-08-04  | 2018-08-05  |
| 华为   | 2018-08-04  | 2020-12-25  |
| 小米   | 2018-08-15  | 2018-08-20  |
| 小米   | 2020-01-01  | 2020-01-05  |
| 苹果   | 2018-09-01  | 2018-09-05  |
| 苹果   | 2018-09-03  | 2018-09-06  |
| 苹果   | 2018-09-09  | 2018-09-15  |
+--------+-------------+-------------+

样例结果

+--------+-----------+
| brand  | act_days  |
+--------+-----------+
| 华为     | 875       |
| 小米     | 11        |
| 苹果     | 13        |
+--------+-----------+

2 建表语句


CREATE TABLE IF NOT EXISTS t_marketing_act (brand STRING, --品牌start_date STRING, -- 营销活动开始日期end_date STRING -- 营销活动结束日期
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC;insert into t_marketing_act(brand, start_date, end_date) values
('华为','2018-08-04','2018-08-05'),
('华为','2018-08-04','2020-12-25'),
('小米','2018-08-15','2018-08-20'),
('小米','2020-01-01','2020-01-05'),
('苹果','2018-09-01','2018-09-05'),
('苹果','2018-09-03','2018-09-06'),
('苹果','2018-09-09','2018-09-15');

3 题解


本题难点在解决交叉问题,但是题目给出的是开始日期和结束日期,我们根据开始和结束日期,使用生成函数,生成活动期间每天的记录,然后根据品牌分组,对日期进行去重即可。

-- 2. 根据品牌分组,act_date进行去重统计
with t as (
-- 1. 生成每次活动每天的记录
selectbrand,start_date,end_date,t.pos,t.value,date_add(start_date, t.pos) as act_datefrom t_marketing_actlateral view posexplode(split(space(datediff(end_date, start_date)), '')) t as pos, value)
selectbrand,count(distinct act_date) as act_days
from t
group by brand;

拓展:

  1. DATE_ADD函数在SQL和HiveQL(HQL)中的用法有所不同。
  • SQL中的DATE_ADD:
    • DATE_ADD(date, INTERVAL value unit)
      • date:要操作的日期。
      • value:要添加的时间间隔数值。
      • unit:时间间隔的单位,例如DAY、MONTH、YEAR等。
  • HiveQL中的DATE_ADD,通常用来向日期添加指定的天数。
    • DATE_ADD(date, days)
      • date:要操作的日期
      • days:要添加的天数,可以是正数(增加天数)或负数(减少天数)。
  1. space(n)函数生成一个包含n个空格的字符串。
  2. 在Python中,将字符串按空字符串''分割是不合法的,会引发错误。但在Hive中,这种操作是合法的,并且常用于将字符串的每个字符分割成单独的元素
  3. 在HiveQL中,POSEXPLODE 是一个特殊的表生成函数,它用于将数组或映射类型的数据展开成多行,并且同时生成每个元素的索引和值。

假设有一个包含数组数据的表example_table

在这里插入图片描述

SELECTid,pos,value
FROM example_table
LATERAL VIEW POSEXPLODE(values) exploded_table AS pos, value;

查询结果将会是:

在这里插入图片描述

在这个例子中:

  • POSEXPLODE(values):将values列中的数组展开。
  • LATERAL VIEW:将POSEXPLODE的结果与原始表一起展平。
  • pos:数组元素的索引。
  • value:数组元素的值。

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

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

相关文章

sam代码简析

Segment Anything:建立了迄今为止最大的分割数据集,在1100万张图像上有超过1亿个掩码,模型的设计和训练是灵活的,其重要的特点是Zero-shot(零样本迁移性)转移到新的图像分布和任务,一个图像分割新的任务、模型和数据集…

记录centos中操作(查找、结束、批量)进程以及crontab定时写法的知识

环境:vps,centos7,python3。 近期写了个python程序,用青龙面板在centos上运行。程序中有while无限循环,但是我在青龙中设置了定时任务(每隔半小时运行一次),于是造成了进程中有多个…

Java进阶16 单元测试XML注解

Java进阶16 一、单元测试 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单原测试就是针对Java方法的测试,进而检查方法的正确性。简单理解就是测试代码的工具。 1、Junit 1.1 Junit引入 目…

全面了解CC攻击和防范策略

前言 “ CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。” 什么是CC攻击? CC攻击前身是一个名为Fatboy的攻击程序,而之所以后来人们会称之为CC,也叫HTTP-FLOOD&#xff…

程序语言基础知识

文章目录 1.程序设计语言2. 程序设计语言的特点和分类3. 编译程序(编译器)的工作原理4. 程序语言的数据成分4.1 数据成分4.2 运算成分4.3 控制成分4.4 传输成分 1.程序设计语言 低级语言:机器语言和汇编语言。 机器语言:二进制代…

Java面向对象-常用类 (包装类)

常用类 – 包装类 基本数据类型的包装类 理解:包装类是8种基本数据类型对应的类 出现原因:Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java…

c/c++ 判断质数(素数)

目录 一.常规方法 二.进阶方法 三.代码示例(运用进阶方法) 质数是整数且仅能被自身和1整除 一.常规方法 所以我们根据质数的这个定义便可用以下思路判断:设需要检测的数为x。y为除1和自己的除数 逐步检测x是否可被y整除,如x…

MySQL之架构设计与历史(一)

架构设计与历史 概述 和其他数据库系统相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥好的作用,但同时也会带来一点选择上的困难。MySQL并不完美,却足够灵活,能够适应高要求的环境,例如…

Android 逆向学习【1】——版本/体系结构/代码学习

#Android 历史版本 参考链接:一篇文章让你了解Android各个版本的历程 - 知乎 (zhihu.com) 三个部分:api等级、版本号、代号(这三个东西都是指的同一个系统) API等级:在APP开发的时候写在清单列表里面的 版本号&…

Vitis HLS 学习笔记--控制驱动TLP - Dataflow视图

目录 1. 简介 2. 功能特性 2.1 Dataflow Viewer 的功能 2.2 Dataflow 和 Pipeline 的区别 3. 具体演示 4. 总结 1. 简介 Dataflow视图,即数据流查看器。 DATAFLOW优化属于一种动态优化过程,其完整性依赖于与RTL协同仿真的完成。因此,…

力扣第206题-反转链表

反转链表的效果示意图 要改变链表结构时,通常加入一个创建的临时头结点会更容易操作 时间复杂度:遍历2遍,2n 空间复杂度:额外创建一个栈,n (空间创建一个数组长度最大为5000,你说这个数组是栈也可以&…

【C++】详解多态

目录 初识多态 多态的条件 接口继承和实现继承 override 和 final 多态原理 继承与虚函数表 析构函数与多态 抽象类 本篇内容关联知识的链接 【C】详解C的继承-CSDN博客 【C】详解C的模板-CSDN博客 【C】C的内存管理-CSDN博客 初识多态 父类被不同子类继承后&#…

报名开启!2024 开源之夏丨Serverless Devs 课题已上线!

Serverless 是近年来云计算领域热门话题,凭借极致弹性、按量付费、降本提效等众多优势受到很多人的追捧,各云厂商也在不断地布局 Serverless 领域。 Serverless Devs 是一个由阿里巴巴发起的 Serverless 领域的开源项目,其目的是要和开发者们…

leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍

文章目录 前言一、移除链表元素二、链表的中间节点三、合并两个有序链表四、反转链表五、链表分割六、倒数第k个节点总结 前言 leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍 一、移除链表元…

扫盲:如何提升医学图像分割性能-to do list

导读:本文主要讨论了如何改进图像分割项目中的分割性能,包括一般性和具体性的问题解决方案,以及如何通过调整模型参数、改善数据集质量、优化模型架构、调整超参数、增加训练时长、改善图像分辨率和后处理技术等方法来提高分割效果。 图像分…

拼多多暂时超越阿里成为电商第一

关注卢松松,会经常给你分享一些我的经验和观点。 拼多多的财报又炸裂了: 拼多多发布了第一季度财报,营收868亿,增长了131%,净利润279亿,增长了246%,营销服务收入424亿,也就是商家的…

小林coding笔记

MySQL执行流程 MySQL 的架构共分为两层:Server 层和存储引擎层。Server 层负责建立连接、分析和执行 SQL。存储引擎层负责数据的存储和提取。 Mysql执行 启动Mysql net start mysql登陆 mysql -u root -p输入密码

SwiftUI中的动画.animation和withAnimation

动画是通过改变视图的状态来给视图添加平滑视图变化的能力。SwiftUI中有两种类型的动画:隐式动画和显式动画。 不管是哪种动画,我们都需要一个被State包装的状态属性值,通过这个值的改变来促使与之相关的UI刷新,继而执行动画。 隐式动画.ani…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-19讲 串口实验UART

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Vivado IP核的快速入门 官方手册和例程

在IP Catalog中选择要使用的IP核,可以查看支持的器件与资料。 在设计源sources页面中选中配置完成的IP核点击右键选择 Open IP Example Design,等待工程加载完成即可,可以点击Run Simulation进行功能仿真进行IP核的学习。 参考&#xff1…