2

在发布此之前,我已经对自动增量进行了广泛的研究,但找不到类似的案例:

我有一个查询从主表中提取数据,按 player_id 分组并按点 desc 排序,因此创建了排名输出。我的目标是进行相同的查询,一旦完成聚合和排序数据,创建一个新列“排名”并自动递增它,以便显示 1、2、3 等,因为所有内容都已按玩家分组并按点 DESC 排序。

多谢你们。

源表示例:

player_id-----------积分-----

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

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

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

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

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

根据此示例的所需输出:

排名------player_id-----score-----

---- 1 ----------2------------25分 ---------

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

编辑

Rownum 做得很好,不需要自动增量虚拟列!请参阅下面 Mutnowski 接受的答案。

4

2 回答 2

6

试试这个

SELECT @rownum:=@rownum+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

我认为您需要运行一个查询来获得没有排名的结果,然后首先运行另一个查询来选择所有并添加排名

于 2012-04-18T20:31:22.080 回答
-2

将 SUM 应用于 Points 列应该会产生您想要的结果。

SELECT @rownum:=@rownum+1 AS ‘rank‘,player_id, SUM(points) 
FROM scores
GROUP BY player_id
ORDER BY SUM(points) DESC;
于 2012-04-18T20:37:22.413 回答