Hive高级 (Rank函数)

有如下数据:

孙悟空,语文,87
孙悟空,数学,95
孙悟空,英语,68
沙悟净,语文,94
沙悟净,数学,56
沙悟净,英语,84
宋松松,语文,64
宋松松,数学,86
宋松松,英语,84
罗婷婷,语文,65
罗婷婷,数学,85
罗婷婷,英语,78

需求:查询每科成绩的排名

分析:rank():分数相同,不去掉数据(并排,假设有2、3分数相同,都排第二名,下面一个就是第四名,没有第三)

          dense_rank():分数相同,则去掉(并排,下面的数据+1) 

         ROW_NUMBER() :不并排,假设二三分数相同,依然会排出第二名、第三名

 

具体看英语成绩的排名:

-- 建表
create table score(
    name string,
    subject string,
    score int)
row format delimited
fields terminated by ",";

--插数据
 load data local inpath "/usr/local/src/test4/hive/score.txt" into table score;

查询:

select * ,
    RANK()  over(partition by subject  order by score desc) rank,
    DENSE_RANK()  over(partition by subject  order by score desc) dense_rank ,
    ROW_NUMBER()  over(partition by subject  order by score desc) row_num
from score;

res:
+-------------+----------------+--------------+-------+-------------+----------+--+
| score.name  | score.subject  | score.score  | rank  | dense_rank  | row_num  |
+-------------+----------------+--------------+-------+-------------+----------+--+
| 孙悟空         | 数学             | 95           | 1     | 1           | 1        |
| 宋松松         | 数学             | 86           | 2     | 2           | 2        |
| 罗婷婷         | 数学             | 85           | 3     | 3           | 3        |
| 沙悟净         | 数学             | 56           | 4     | 4           | 4        |
| 宋松松         | 英语             | 84           | 1     | 1           | 1        |
| 沙悟净         | 英语             | 84           | 1     | 1           | 2        |
| 罗婷婷         | 英语             | 78           | 3     | 2           | 3        |
| 孙悟空         | 英语             | 68           | 4     | 3           | 4        |
| 沙悟净         | 语文             | 94           | 1     | 1           | 1        |
| 孙悟空         | 语文             | 87           | 2     | 2           | 2        |
| 罗婷婷         | 语文             | 65           | 3     | 3           | 3        |
| 宋松松         | 语文             | 64           | 4     | 4           | 4        |
+-------------+----------------+--------------+-------+-------------+----------+--+

 

你可能感兴趣的:(Hive)