欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > hive 统计各项目下排名前5的问题种类

hive 统计各项目下排名前5的问题种类

2024/11/20 15:13:29 来源:https://blog.csdn.net/csdnfanguyinheng/article/details/143787669  浏览:    关键词:hive 统计各项目下排名前5的问题种类

实现指定某项目下的数据效果图如下所示:
在这里插入图片描述
其中 ABCDE 为前5名的问题种类,其中A问题有124个(出现了124次)

数据说明:

  • 整个数据集 包含很多项目
  • 一个项目 包含很多问题
  • 一个问题 选项 可认为是 类别值,所有出现的问题都落在这些类别范围内

需求梳理:前5名的排名依据于 问题数量,而不是按照某字段排序,而问题数量是按照 项目 + 问题 分组后统计的数量。

分步处理:
1.先分组统计,查询数据(屏蔽真实表和字段,但逻辑不变)

select 项目, 问题,count(*) as numfromGROUP BY 项目, 问题

结果:
在这里插入图片描述
可以看到上述部分截图中 有3个项目,分别是 0001/0009/0002,
其中 前2行和后2行都是 项目 0001的数据,表示它下面的4个问题种类 以及 统计数量。

2.把上述结果作为一张逻辑表,按照其中的数量字段 使用开窗函数 降序排序:

SELECT * FROM 
(SELECT 项目, 问题, 数量,row_number() over(partition BY 项目 order by 数量 desc) as rn FROM (select 项目, 问题,count(*) as 数量from 表名GROUP BY 项目, 问题) x
) x8c

结果如下所示:这是项目 0001 下排名前10的 问题 + 数量
在这里插入图片描述
项目0004的数据。。
在这里插入图片描述
到这一步,我们得到了每个项目下 的 所有问题,并且 问题按 数量倒序排名,还差最后一步:每个项目,只取排名前5的问题数据。

  1. 其实,我们只需要在上一步的sql 中 加上 where 条件过滤即可:
    where 排名 <= 5 FYI: 根据业务相应调整。
SELECT * FROM 
(SELECT 项目, 问题, 数量,row_number() over(partition BY 项目 order by 数量 desc) as rn FROM (select 项目, 问题,count(*) as 数量from 表名GROUP BY 项目, 问题) x
) x8c
where rn <= 5

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com