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

SQL 专项练习题(合集)

1,第一题

1)表名:t_patent_detail (专利明细表)

2)表字段:专利号(patent_id)、专利名称(patent_name)、专利类型(patent_type)、申请时间

(aplly_date)、授权时间(authorize_date)、申请人(apply_users)

3)说明:同一个专利,可以有1到多个申请人,多人之间按分号隔开。本表记录数约1万条。例

如:

4)请写出hive查询语句,各类型专利top 10申请人,以及对应的专利申请数

代码演示

--各类型专利top 10申请人,以及对应的专利申请数
select t1.apply_name `申请人`,count(*) `专利申请数`,rank() over(order by
count(*) desc) `专利数排名`
from (
--先将申请人字段炸裂
select d.*, t1.coll `apply_name`
from t_patent_detail d
lateral view explode(split(apply_users,';')) t1 as coll
) t1
group by t1.apply_name; --按照申请人分组
 2,第二题

问题: 现有用户登录记录表,请查询出用户连续三天登录的所有数据记录

id           dt

1    2024-04-25 
1    2024-04-26 
1    2024-04-27
1    2024-04-28
1    2024-04-30
1    2024-05-01
1    2024-05-02
1    2024-05-04
1    2024-05-05
2    2024-04-25
2    2024-04-28
2    2024-05-02
2    2024-05-03
2    2024-05-04

期望结果:

image.png

代码演示

--建表
create table user_log(
  id int,
  dt string
)
row format delimited
fields terminated by '\t';
load data local inpath '/home/hivedata/lianxu.txt' into table user_log;
--第一步:求解每行日期后面第三行的日期 lead()和 真正第三天的日期
select*,
      lead(dt,2) over(partition by id order by dt) later3dt,
      date_add(dt,2) true3dt
    from user_log;
--第二步:判断是否连续登录三天
with t as (
  select*,
  lead(dt,2) over(partition by id order by dt) later3dt,
  date_add(dt,2) true3dt
  from user_log
) select *,if(later3dt==true3dt,1,0) num from t;
--第三步:筛选出连续登录三天的每个起始日期
with t as (
  select*,
  lead(dt,2) over(partition by id order by dt) later3dt,
  date_add(dt,2) true3dt
  from user_log
) ,t1 as (
  select *,if(later3dt==true3dt,1,0) num from t
)select * from t1 where num=1;
-- 第四步:表合并求最终结果(和一个三行的表进行合并)(笛卡尔积)
with t as (
  select*,
  lead(dt,2) over(partition by id order by dt) later3dt,
  date_add(dt,2) true3dt
  from user_log
) ,t1 as (
  select *,if(later3dt==true3dt,1,0) num from t
),t2 as (
  select * from t1 where num=1
) select id,dt,list,date_add(dt,d.list) dt2  from t2,(select explode(array(0,1,2)) list) d;


http://www.kler.cn/a/383454.html

相关文章:

  • Python练习10
  • 15分钟学 Go 实践项目二:打造博客系统
  • 使用ssh-key免密登录服务器或免密连接git代码仓库网站
  • html第一个网页
  • JavaScript while 循环
  • 【pycharm jupyter】远程开发 启动报错
  • 《通过 Jmeter 压测存储过程详解》
  • Gitlab-执行器为Kubetnetes时的注意事项,解决DNS解析问题
  • 基于ExtendSim的库存与订购实验
  • spring-data-jpa 一对多,多对一,多对多
  • PathVariable annotation was empty on param 0.问题解决
  • 《C语言程序设计现代方法》note-3 选择语句 循环语句
  • C++(一)
  • 开学轻松逆袭孩子的学习利器培养自律习惯,提高学习效率❗❗让习惯养成更轻松~
  • 【Rust Crate之Actix Web(一)】
  • Sigrity Power SI 3D-EM Inductance Extraction模式如何进行电感的提取操作指导(一)
  • 计算机体系结构知识(二)-gdb和args
  • Linux -- 初识线程
  • 【鉴权】OAuth 2.0: 高度灵活与安全的身份认证框架
  • 百度实习生内推
  • Java实战项目-基于微信小程序的校园生活互助服务小程序
  • 供热的一些基础技术数据
  • 2024年10月全球人工智能领域的重大事件盘点
  • Prompt Engineering介绍
  • AI大模型重塑软件开发流程:定义、应用场景、优势、挑战及未来展望
  • 父组件调用函数式子组件,并向子组件传递函数参数。