排名函式的型別
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 將已經排序好的資料從第一條依次取出來,取一條就自增加一,實...