2013-12-17 26 views
1

的不相同的值,我想增加訂單,如果增量如果

我曾嘗試下面的查詢

SQL FIDDLE

select rank, @rownum := @rownum + 1 AS `myorder` 
from myRankorder, (SELECT @rownum := 0) AS a 
order by rank desc 

但它返回這個結果排名值不一樣

RANK MYORDER 
10  1 
8  2 
6  3 
6  4 
4  5 
4  6 
4  7 
3  8 
2  9 
1  10 

所需輸出

RANK MYORDER 
10  1 
8  2 
6  3 
6  3 
4  4 <-- if rank value is same do not increment myorder value 
4  4 
4  4 
3  5 
2  6 
1  7 

回答

2

這有點複雜。你需要一個額外的變量:

select rank, 
     if (@prevrank = rank, @rownum, @rownum := @rownum + 1) AS `myorder`, 
     @prevrank := rank 
from myRankorder cross join 
    (SELECT @rownum := 0, @prevrank := -1) const 
order by rank desc; 

只要一點。 MySQL不保證select中表達式的評估順序。在實踐中這是有效的,但不能保證。

+0

謝謝,我會檢查您的查詢 –

+0

我已修改您的查詢http://sqlfiddle.com/#!2/d9a7d/6請檢查只有一行值沒有期望的結果 –

+0

@PragneshChauhan。 。 。你的SQL小提琴有一個錯誤。第三列是「@prevrank:= rank」。 –