【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)!