/*
数据集
孙悟空 语文 87
孙悟空 数学 95
孙悟空 英语 68
大海 语文 94
大海 数学 56
大海 英语 84
宋宋 语文 64
宋宋 数学 86
宋宋 英语 84
婷婷 语文 65
婷婷 数学 85
婷婷 英语 78
*/
-- 创建表
create table score(
name string,
subject string,
score int)
row format delimited fields terminated by "\t";
--导入数据
load data local inpath '/opt/module/datas/score.txt' into table score;
/*
RANK() 允许并列排名 重复后会跳号
ROW_NUMBER() 行号
DENSE_RANK() 允许并列,不跳号
CUME_DIST() 数对 从排序后的第一行到当前行之间数据 占整个数据的百分比
PERCENT_RANK() RAMK()值-1 除 整个数据集数据量-1
*/
select *,
rank() over (order by score) ranknum,
row_number() over (order by score) rownum,
dense_rank() over (order by score) dnnum,
cume_dist() over (order by score) cdnum,
percent_rank() over (order by score) prnum
from score;
/*
执行结果
name,subject,score,ranknum,rownum,dnnum,cdnum,prnum
大海,数学,56,1,1,1,0.08333333333333333,0
宋宋,语文,64,2,2,2,0.16666666666666666,0.09090909090909091
婷婷,语文,65,3,3,3,0.25,0.18181818181818182
孙悟空,英语,68,4,4,4,0.3333333333333333,0.2727272727272727
婷婷,英语,78,5,5,5,0.4166666666666667,0.36363636363636365
大海,英语,84,6,6,6,0.5833333333333334,0.45454545454545453
宋宋,英语,84,6,7,6,0.5833333333333334,0.45454545454545453
婷婷,数学,85,8,8,7,0.6666666666666666,0.6363636363636364
宋宋,数学,86,9,9,8,0.75,0.7272727272727273
孙悟空,语文,87,10,10,9,0.8333333333333334,0.8181818181818182
大海,语文,94,11,11,10,0.9166666666666666,0.9090909090909091
孙悟空,数学,95,12,12,11,1,1
*/
/*
NTILE(x):将数据集均分到x个组中,返回被分配的组号
下面案例 一共12条数据 被平分到了5组中 余数为2 多出2条被分配到 第一组和第二组中
*/
select *,ntile(5) over() from score;
/*
执行结果
name,subject,score,ntile_window_0
孙悟空,语文,87,1
孙悟空,数学,95,1
孙悟空,英语,68,1
大海,语文,94,2
大海,数学,56,2
大海,英语,84,2
宋宋,语文,64,3
宋宋,数学,86,3
宋宋,英语,84,4
婷婷,语文,65,4
婷婷,数学,85,5
婷婷,英语,78,5
*/
Hive函数Demo3:排序函数
最新推荐文章于 2022-07-15 23:51:29 发布