hive row number 組內排序函式

2021-08-29 07:20:56 字數 1718 閱讀 5391

相對用一次請求得到的item的粗排進行排序,平時得到的粗排結果是[0,1]之間的乙個值,但是想將其轉換為index的形式。

hive中的函式row_number() 

使用方法:

select column_a,column_b,

row_number() over (partition by column_a order by column_b asc/desc) rn

from table

rn 是排序的別名執行時每組的編碼從1開始 

partition by:類似hive的建表,分割槽的意思;column_a 是分組字段 

order by :排序,預設是公升序,加desc降序;column_b 是排序字段

在分組內,進行排序。

分析:針對我的這個問題,column_a欄位就表示一次請求,對一次請求召回的item粗排的結果,排序依據是按照column_b,就是粗排的得分,產生的結果是rn。

左邊一列是得分,右邊一列是排序結果:

問題:如果order by中的col2中元素相同,怎麼序號怎麼標註?

答:仍然按照順序排列,但是每次執行的結果都不一樣,比如:

col1

col2

col3

rncol1

col2

col3

rnq122a

1q122b

1q122b

2q122a

2q123c

3q123c

3q211q

1q211q

1q211w

2q211w

2q212e

3q212e

3先來看個例子:

select province,city,

rank() over (order by people desc) rank,

dense_rank() over (order by people desc) dense_rank,

row_number() over(order by people desc) row_number

from datatable

group by province,city,people;

執行結果:

province   city  rank  dense_rank   row_number

浙江    杭州    1       1       1

江蘇    蘇州    2       2       2

江蘇    南京    3       3       3

浙江    溫州    4       4       4

江蘇    某市    4       4       5

浙江    寧波    6       5       6

江蘇    某某市  7       6       7

浙江    嘉興    7       6       8

主要注意打圈的:

row_number:順序下來

rank:在遇到資料相同項時,會留下空位5,(第一列4,4,6)

dense_rank:在遇到資料相同項時,不會留下空位,(紅框內第一列,4,4,5)

參考:

隨記 組內聚會

今天是2009年11月9日,我們倉庫開發組的兄弟姐妹們進行了一次聚會,給大家放鬆的機會,更加增加大家的感情。快到年底了,倉庫開發小組確實是辛苦忙了大半年,實現了資料倉儲從舊居移到新居,喬遷新居,是件高興的事情,但是整理舊居的物品確實是讓人頭疼的,怎麼樣能夠把積攢了這麼長時間的舊東西歸歸類,該扔掉的扔...

mysql group by組內排序

mysql group by組內排序 首先是組外排序 select z.create time,z.invoice id from qf invoice log z where z.type 102 group by z.invoice id order by z.create time desc ...

關於組內協作的會議

關於組內協作的會議 作者 李先靜 上周二我讓組內的同事,把自己所負責應用程式的外掛程式介面描述文件整理出來,在周五前發給我,結果等到這周一,才有乙個同事發出,其他同事都還沒有去整理。之前也有過類似的情況,請求協作的同事發出請求之後,很少有人主動的回應。我知道這並不是誰對誰錯的問題,而是溝通和協作的機...