有時我們需要做類似於銷量排序的問題,銷量相同的時候要有並列名次,類似於如下數據,我們要對num從大到小排名。
Id |
num |
1 |
1000 |
2 |
1000 |
3 |
500 |
4 |
4000 |
利用mysql的臨時變量執行sql,其中臨時變量@a用於記錄排序,@b用於記錄上一行的num數值,並與本行的num數值做對比,若不相同則會觸發@a加一,若相同則@a數值不變
select a.num,(@a:= @a + (@b <> @b:=a.num)) rank from sale a,(select @a:=0,@b:=-1) t order by a.num desc;
最終結果如下:
num |
rank |
4000 |
1 |
1000 |
2 |
1000 |
2 |
500 |
3 |