2012-04-18 10 views
2

BY ORDERは、私はこれを投稿する前に自動インクリメントに関する広範な研究を行ってきましたが、同様のケースを見つけることができませんでしたplayer_idでグループ化し、ポイントdescで並べ替えると、ランキング出力が作成されます。私が目指しているのは、同じクエリを作成し、データの集計とソートを完了し、新しい列「Rank」を作成して自動的にインクリメントして1,2,3などを表示することです。は、GROUP BYの後に仮想列をインクリメントオートは、クエリ

ありがとうございます。ソーステーブルの

例:

player_id -----------点-----

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

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

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

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

---

所望の出力、本実施例に係る------------------- 5 ---------

2:

ランク ------ player_id -------スコア-----

---- ---------- 2 ----- ------ 25点---------

---- ---------- 1 ----------- 20ポイント---------

EDIT

ROWNUMはよく仕事をして、自動インクリメント仮想列の必要はありません!下記のMutnowskiの受け入れられた答えをご覧ください。

+0

http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/それはGROUPBYとの例ではないのですが、それはあなたを始める必要がありますをチェックしてください。私はあなたがクエリを実行する必要があると思うランクなしで結果を得る、最初にすべてを選択し、ランクを追加する別のクエリを実行 – Murtnowski

答えて

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 

は、私はあなたがして、ランクなしであなたの結果を得るすべてを選択し、ランクを追加し、その最初に別のクエリを実行するためにクエリを実行する必要があると思う試しにSUMを適用

+0

あなたは正しいと思い、それは魅力的なように働いた。感謝万円! ps:申し訳ありませんが、あなたの回答を+1するのに十分な担当者がいませんが、私はもちろんそれを受け入れます! – Naim

-2

あなたが望む結果が得られるはずです。

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

+0

DrewCoに感謝します。 FROMスコアの後には省略されています(SELECT @rownum:= 0)。 – Naim

+0

@Mutnowski - いいえ、ネームが指摘したように、クエリの後にリセットされない限り、それは増分を続けます。 – DrewCo