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

实现指定某项目下的数据效果图如下所示:

其中 ABCDE 为前5名的问题种类,其中A问题有124个(出现了124次)

数据说明:

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

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

分步处理:

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

sql 复制代码
select 
   项目
   , 问题
   ,count(*) as num
 from 表
 GROUP BY 项目, 问题

结果:

可以看到上述部分截图中 有3个项目,分别是 0001/0009/0002,

其中 前2行和后2行都是 项目 0001的数据,表示它下面的4个问题种类 以及 统计数量。

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

sql 复制代码
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: 根据业务相应调整。
sql 复制代码
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
相关推荐
一个天蝎座 白勺 程序猿2 小时前
大数据(4.5)Hive聚合函数深度解析:从基础统计到多维聚合的12个生产级技巧
大数据·hive·hadoop
weixin_307779139 小时前
C#实现HiveQL建表语句中特殊数据类型的包裹
开发语言·数据仓库·hive·c#
一个天蝎座 白勺 程序猿20 小时前
大数据(4.2)Hive核心操作实战指南:表创建、数据加载与分区/分桶设计深度解析
大数据·hive·hadoop
一个天蝎座 白勺 程序猿21 小时前
大数据(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
数据仓库·hive·hadoop
weixin_307779131 天前
判断HiveQL语句为建表语句的识别函数
开发语言·数据仓库·hive·c#
酷爱码1 天前
hive相关面试题以及答案
hive·分布式
珹洺2 天前
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
java·开发语言·前端·hive·hadoop·servlet·html
shouwangV62 天前
hive执行CTAS报错“Hive Runtime Error while processing row”
数据仓库·hive·hadoop
一个天蝎座 白勺 程序猿2 天前
大数据(4.1)Hive架构设计与企业级实战:从内核原理到性能巅峰优化,打造高效数据仓库
数据仓库·hive·hadoop
想要变瘦的小码头4 天前
hive数据仓库
数据仓库·hive·hadoop