Hive-2.HiveQL查询中分析函数

2023-11-29 04:08
文章标签 分析 函数 查询 hive hiveql

本文主要是介绍Hive-2.HiveQL查询中分析函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 RANK()函数

返回数据项在分组中的排名,排名相等会在名次中留下空位

 

2 DENSE_RANK()函数

返回数据项在分组中的排名,排名相等会在名次中不会留下空位

3 NTILE()函数

返回n分片后的值

4 ROW_NUMBER()

为每条记录返回一个数字

分析函数案例实战

针对分组后,对组内数据进行排序

(1)Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的, 同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。

(2)Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。

(3)Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。

1、创建表

create table student_info(

S_ID  int,

COURSE string,

SCORE int,

CLASS_ID int

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t';

 

 

2、初始化数据

1000 math 70 1

1000 china 80 1

1000 oracle 90 1

1001 math 80 1

1001 china 75 1

1001 oracle 78 1

1002 math 81 2

1002 china 76 2

1002 oracle 77 2

1003 math 80 2

1003 china 75 2

1003 oracle 78 2

3、统计查询

排名/排序的时候,有时候,我们会想到利用伪列rownum,利用rownum确实可以解决某些场景下的问题(但是相对也比较复杂),而且有些

场景下的问题却很难解决

 

3.1 每个班级同一个科目的成绩排名

 

select S_ID,CLASS_ID,COURSE,SCORE, 

rank() over (partition by CLASS_ID,COURSE  order by SCORE desc ) rk,

dense_rank() over (partition by CLASS_ID,COURSE  order by SCORE desc ) drk,

row_number() over (partition by CLASS_ID,COURSE  order by SCORE desc ) rn

from student_info

 

s_id    class_id         course  score   rk      drk     rn

1000    1         china   80      1       1       1

1001    1        china   75      2       2       2

1001    1        math    80      1       1       1

1000    1         math    70      2       2       2

1000    1        oracle  90      1       1       1

1001    1        oracle  78      2       2       2

1002    2        china   76      1       1       1

1003    2        china   75      2       2       2

1002    2        math    81      1       1       1

1003    2        math    80      2       2       2

1003    2        oracle  78      1       1       1

1002    2        oracle  77      2       2       2

 

 

3.2 统计每门课程的成绩排名

select S_ID,COURSE,SCORE, 

rank() over (partition by COURSE  order by SCORE desc )  rk ,

dense_rank() over (partition by course order by score desc) drk,

row_number() over(partition by course order by score desc) rn

from student_info;

 

s_id    course  score   rk      drk     rn

1000    china   80      1       1       1

1002    china   76      2       2       2

1001    china   75      3       3       3

1003    china   75      3       3       4

1002    math    81      1       1       1

1001    math    80      2       2       2

1003    math    80      2       2       3

1000    math    70      4       3       4

1000    oracle  90      1       1       1

1001    oracle  78      2       2       2

1003    oracle  78      2       2       3

1002    oracle  77      4       3       4

 

 

3.3 统计每门课程的成绩排名前2名的人员

select * from (

select S_ID,COURSE,SCORE, 

rank() over (partition by COURSE  order by SCORE desc )  rk ,

dense_rank() over (partition by course order by score desc) drk,

row_number() over(partition by course order by score desc) rn

from student_info) t

where t.drk<=2

 

 

t.s_id  t.course        t.score t.rk    t.drk   t.rn

1000    china    80      1       1       1

1002    china    76      2       2       2

1002    math     81      1       1       1

1001    math     80      2       2       2

1003    math     80      2       2       3

1000    oracle    90      1       1       1

1001    oracle   78      2       2       2

1003    oracle    78      2       2       3

 

 

注意:如果只是简单的想到去用rownum <= 2 得到的结果显然不可能是正确的。

这篇关于Hive-2.HiveQL查询中分析函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431390

相关文章

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

基于Redis实现附近商铺查询功能

《基于Redis实现附近商铺查询功能》:本文主要介绍基于Redis实现-附近商铺查询功能,这个功能将使用到Redis中的GEO这种数据结构来实现,需要的朋友可以参考下... 目录基于Redis实现-附近查询1.GEO相关命令2.使用GEO来实现以下功能3.使用Java实现简China编程单的附近商铺查询4.Red

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重