自学内容网 自学内容网

【Hive sql 面试题】求出连续出现三次及以上的数字

表数据如下:

在这里插入图片描述

建表和插入数据:

-- 建表语句
create table logs(
   id int,
   num int
);


-- 插入语句
INSERT INTO logs (id, num) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(5, 1),
(6, 2),
(7, 2);

解题思路和答案:

要求是:求出连续出现三次及以上的数字

思路:

核心:

id 自增,如果数字连续出现,id 与 num 排名( row_num() )之后的差值相等

1、根据num分组,并根据id排序进行排名( row_num() )

2、将id与排名之后的值相减

3、按照两个相减之后的差值进行分组,如果大于等于三,就代表连续出现三次及以上

代码:

with t as (
   select *,row_number() over (partition by num order by id) rowNum,
       id - row_number() over (partition by num order by id) countNum from logs
)
select num,count(*) from t group by num,countNum having count(*) >= 3;

运行结果:

在这里插入图片描述


原文地址:https://blog.csdn.net/lzhlizihang/article/details/143415065

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!