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

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客