mysql中沒有獲取行號的函數,因此需要通過一些自定義語句來進行獲取。通常做法是,通過定義用戶變量@rownum來保存表中的數據。通過賦值語句@rownum:=@rownum+1來累加達到遞增行號。
例如:select a.* ,@rownum:=@rownum+1 from a,(select @rownum:=0) r; 后半部分語句的select @rownum:=0 相當於創建了r的新表,其表的列為@rownum,數值為0.
通過利用變量將@rownum的行進行重新賦值,並顯示。可以應用於獲取行號或名次排列。
另外,在名次排列時,由於會有重復的數據,排列時僅僅按照,@rownum:=@rownum+1。排序是不對的,需要在數據相同時,名次應該相同。因此需要另一變量保存上次的數據,並進行與本行數據對比,相同 序號不變,不同序號應該等於行號。此時需要應用到case when進行判斷,例如:
Select a.*,
Case
When @rownum0=a.c_id then @rownum:=@rownum+1
When @rownum0:=a.c_id then @rownum:=1
Else @rownum
End rank1,
Case
When @rownum1=a.s_score then @rownum2
When @rownum1:=a.s_score then @rownum2:=@rownum
Else @rownum2
End rank2
from (select * from score order by c_id ,s_score desc
) as a,(select @rownum:=0, @rownum0:=0,@rownum1:=0,@rownum2:=0) r;