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

相关文章

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用