2015-08-28 27 views
0

我想添加一個排列列,指示使用MySQL的SQL查詢中另一個數字列的排名。如何根據mysql中的聚合列添加排名列?

SELECT value, @i:[email protected]+1 as rank FROM table, (SELECT @i:=0) rank_init ORDER BY value DESC 

這是以前所描述here和其他地方上SO:對於簡單的,非聚集的查詢這可以通過使用一個計數器變量如下來實現。但是,如果value是聚合函數的結果(並且結果因此按聚合值進行排序),則排序列似乎是在應用排序之前添加的,並且當然也會跳過值。

SELECT sum(value), @i:[email protected]+1 as rank FROM table, (SELECT @i:=0) rank_init GROUP BY other_field ORDER BY value DESC 

還有沒有使用臨時表或子查詢的方法?

回答

0

使用子查詢:

SELECT value, (@i := @i + 1) as rank 
FROM (SELECT sum(t.value) as value 
     FROM table 
     GROUP BY other_field 
    ) t CROSS JOIN 
    (SELECT @i := 0) rank_init 
ORDER BY value DESC; 
+0

是的,我知道的是,在我期待的解決方案,而子查詢 – barbaz

+0

問題陳述我想你需要一個子查詢來實現這一點。我還指出,只是在查詢中設置參數使用子查詢。 –