2012-04-18 61 views
2

我做了關於自動遞增廣泛的研究發佈在此之前也沒有找到類似的例子:自動遞增GROUP BY後一個虛擬列,ORDER BY查詢

我有一個查詢從主要拉數據表格,按player_id分組,按desc排序,因此創建排名輸出。我的目標是完成相同的查詢,一旦它完成聚合和排序數據,創建一個新的列「Rank」並自動增加它,因此它顯示1,2,3等等,因爲一切都已經按玩家分組並且按點DESC排序。

謝謝你們。源表的

實施例:

player_id -----------點-----

--- 1 ---------- --------- 5 ----------

--- 1 ------------------- 10-- -------

--- 1 ------------------- 5 ---------

- -2 ------------------- 20 ---------

--- 2 5 ------------------- ---------

根據本示例

希望的輸出:

排名 ------ player_id -------得分-----

---- ---------- 2 ----- ------ 25 POINTS ---------

---- ---------- 1 ----------- 20分---------

編輯

Rownum做得很好,不需要自動增加虛擬列!請參閱下面的Mutnowski接受的答案。

+0

退房http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/它不是一個GROUPBY一個例子,但它應該讓你開始。我認爲你需要運行一個查詢得到你的結果沒有排名,然後運行另一個查詢,首先選擇所有並增加排名 – Murtnowski 2012-04-18 20:15:02

回答

6

試試這個

SELECT @rownum:[email protected]+1 AS ‘rank’, Player_ID, Points FROM (SELECT Player_ID, SUM(Points) AS 'Points' FROM tblScores GROUP BY Player_ID ORDER BY Points DESC) AS foo, (SELECT @rownum:=0) AS foo2 

我想你需要運行一個查詢,讓您的結果,而不等級,然後在第一次選擇所有,並增加了等級運行另一個查詢

+0

你認爲是正確的,它的工作就像一個魅力。太感謝了! ps:對不起,我沒有足夠的代表來+1你的答案,但我當然接受它! – Naim 2012-04-18 23:37:04

-2

應用SUM的點列應該產生你想要的結果。

SELECT @rownum:[email protected]+1 AS ‘rank‘,player_id, SUM(points) 
FROM scores 
GROUP BY player_id 
ORDER BY SUM(points) DESC; 
+0

您的@rownum不會返回NULL嗎? – Murtnowski 2012-04-18 20:41:03

+0

感謝德魯公司爲您付出的努力。您在FROM分數後省略了(SELECT @rownum:= 0)r。 – Naim 2012-04-18 23:43:53

+0

@Mutnowski - 不,但它會繼續增加,除非它在查詢後重置,正如Naim指出的那樣。 – DrewCo 2012-04-19 13:51:07