2012-04-18 116 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