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