postgres 實現查詢某條數據的排名

我就廢話不多說瞭,大傢還是直接看代碼吧~

select * from (select ROW_NUMBER () OVER (ORDER BY fat desc nulls last) AS xuhao,foodnum,foodname,fat from ek_food where isdel=0) food where foodnum = ‘Ss192008’

涉及到的問題

1.排序時,字段值為null的會排在前面,導致數據不準確,解決辦法 在order by後面增加 nulls last

2.給查詢的結果增加序號 select ROW_NUMBER () OVER (ORDER BY fat desc nulls last) AS xuhao

補充:利用 PostgreSQL 實現對數據進行排名

一、需求:對以下用戶的積分進行排名計算

user_id name score
1 john 1000
2 mike 1200
3 jelly 1300
4 brook 1500
5 nanny 1200

需要知道 user_id = k 的用戶對應的積分排名

二、通過 PostgreSQL 的窗口函數實現

SELECT user_id, name, score, RANK() OVER (ORDER BY score DESC) FROM user;

user_id name score rank
4 brook 1500 1
3 jelly 1200 2
2 mike 1300 3
5 nanny 1500 3
1 john 1200 5

如要獲取排名 < 3 的用戶:

SELECT user_id, name, score, user_rank FROM (SELECT user_id, name, score, RANK() OVER (ORDER BY score DESC) AS user_rank FROM user) AS T WHERE user_rank < 3;

— 註意子查詢在from中需要寫別名

user_id name score rank
4 brook 1500 1
3 jelly 1200 2

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: