mysql 當前排名查詢 mysql排名查詢

2021-10-17 22:38:59 字數 2493 閱讀 5948

排名函式的型別

row_number函式:不考慮並列名次的情況。比如前3名是並列的名次,row_number函式排名之後是正常的1,2,3,4。

通用的mysql排名解法

由於mysql8.0才有視窗函式解決排名問題,之前的版本需要自行實現排名函式,我寫了一些通用的sql套用以上的排名場景,以下sql經過了本人的自測。

無分類的rank

select re.ele, re.myrank

from (

select t.ele,

@incrank := @incrank + 1,

if(@sort_element = t.ele, @cur_rank, @cur_rank := @incrank) myrank,

@sort_element := t.ele

from tname t,

(select @cur_rank := 0, @sort_element := null, @incrank := 0) r

order by t.ele desc) re;

複製**

無分類的dense_rank

select re.ele, re.myrank

from (

select t.ele,

@sort_element,

if(@sort_element = t.ele, @cur_rank, @cur_rank := @cur_rank + 1) myrank,

@sort_element := t.ele

from tname t,

(select @cur_rank := 0, @sort_element = null) tmp

order by t.ele desc) re;

複製**

無分類的row_number

select t.ele, (@cur_rank := @cur_rank + 1) myrank

from tname t,(select @cur_rank := 0) tmp

order by t.ele desc;

複製**

分類rank

select re.groupele, re.sortele, re.myrank

from (

select t.groupele,

t.sortele,

if(@pre_course_id = t.groupele,

@incrank := @incrank + 1,

@incrank := 1) tempele1,

if(@group_ele = t.groupele,

if(@sort_ele = t.sortele, @cur_rank, @cur_rank := @incrank),

@cur_rank := 1) myrank,

@sort_ele := t.sortele tempele2,

@group_ele := t.groupele tempele3

from tname t,

(select @cur_rank := 0, @group_ele := null, @sort_ele := null, @incrank := 1) tmp

order by t.groupele, t.sortele desc) re;

複製**

分類dense_rank

select re.groupele,re.sortele,re.myrank

form (

select t.groupele,t.sortele,

if(@group_ele = t.groupele

if(@sort_ele = t.sortele, @cur_rank, @cur_rank := @cur_rank + 1),

@cur_rank := 1) myrank,

@sort_ele := t.sortele,

@group_ele := t.groupele

from tname t, (select @cur_rank :=0, @sort_ele = null, @group_ele := null) r

order by c, score desc)re;

複製**

分類row_number

select re.groupele, re.sortele, re.myrank

from (

select t.groupele,

t.sortele,

if(@group_ele = t.groupele, @cur_rank := @cur_rank + 1, @cur_rank := 1) myrank,

@group_ele := t.groupele

from tnale t,

(select @cur_rank := 0, @group_ele := null) r

order by t.groupele, t.sortele desc) re;

複製**

貪心(弱)已知當前排名,倒推上月排名

題意 給你n個當前排名的字串,和當前排名相對上個月的排名是上公升了還是下降了。求上個月的排名 解析 顯然。如果當前排名是up,那麼上個月的排名為 i 1,n 如果是down 那麼上個月的排名是 1,i 1 細思 貪心的做法就是按照i增加的順序讓down的盡量往前排 盡量不要占用後 t 1,n 的區間...

mysql 查詢字段排名 mysql 查詢排名

sql語句查詢排名 思路 有點類似迴圈裡面的自增一樣,設定乙個變數並賦予初始值,迴圈一次自增加1,從而實現排序 mysql裡則是需要先將資料查詢出來並先行按照需要排序的字段做好降序desc,或則公升序asc,設定好排序的變數 初始值為0 a 將已經排序好的資料從第一條依次取出來,取一條就自增加一,實...

mysql 查詢排名

sql語句查詢排名 思路 有點類似迴圈裡面的自增一樣,設定乙個變數並賦予初始值,迴圈一次自增加1,從而實現排序 mysql裡則是需要先將資料查詢出來並先行按照需要排序的字段做好降序desc,或則公升序asc,設定好排序的變數 初始值為0 a 將已經排序好的資料從第一條依次取出來,取一條就自增加一,實...