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

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

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

数据说明:

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

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

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

select 
   项目
   , 问题
   ,count(*) as num
 fromGROUP 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

在这里插入图片描述


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

相关文章:

  • PyTorch深度学习与企业级项目实战-预训练语言模型GPT
  • 机器学习总结
  • Python 连接 Redis 进行增删改查(CRUD)操作
  • 使用elementUI实现表格行拖拽改变顺序,无需引入外部库
  • 【Webpack实用指南】如何拆分CSS资源(2)
  • 区块链技术在慈善捐赠中的应用
  • 自动驾驶合集(更新中)
  • css3D变换用法
  • Java中的排序算法:探索与比较
  • 昇思大模型平台打卡体验活动:项目5基于MindSpore实现Transformer机器翻译
  • MacOS 本地生成SSH key并关联Github
  • 【Linux】多线程(概念,控制)
  • 微信小程序自定义tabbar;禁用某个tab;修改某个tab的样式
  • Three.js 原生 实现 react-three-fiber drei 的 磨砂反射的效果
  • I.MX6U 裸机开发9.BEEP蜂鸣器实验
  • leetcode LCR 068 搜索插入位置
  • C++ vector 容器
  • 推荐一款完全开源的多端仓库管理系统
  • 计算机视觉空域处理完整版——超详细图文解
  • Docker安装部署RabbitMQ
  • Android12的ANR解析
  • 防爆增安型电机与防爆无火花型电机的区别
  • Agent熔断:助力构建更健壮的IT监控系统
  • 【代码随想录】刷题记录(29)-用栈实现队列
  • Web性能优化:从基础到高级
  • 引入了JUnit框架 却报错找不到:java.lang.ClassNotFoundException