如何查询获得一行的排名?

时间:2011-03-17 00:40:42

标签: mysql sql rank

我正在创建一个照片排名系统。基本上,我有三个主要领域 - 赢了,输了,怎么玩。

假设我有三张照片

Photo  Won  Lost  Played
-------------------------
A      3    2     5
B      1    4     5
C      3    2     5

我打算写一个查询来获得每张照片的排名。问题是,照片​​A和照片C具有完全相同的记录。如何为Photo A和C创建一个返回1的查询?

Photo  Won  Lost  Played  Rank
-------------------------------
A      3    2     5       1
C      3    2     5       1
B      1    4     5       ?

于2011年3月17日添加

我稍微更改了表格结构

所以现在我有“vote_ratio”字段而不是“播放”字段。 “vote_ratio”保存“vote_win”/“vote_lose”的值。

所以必须将表修改为

Photo   Won   Lost   Ratio
A       3     2      1.5 
B       1     4      0.25 
C       3     2      1.5

我想做什么:

  1. 仅查询“照片A”并获得其排名。
  2. 查询所有记录并显示每条记录的排名。
  3. 我可以通过以下查询来做#2。

    "select * from table order by ratio desc"
    

    但又出现了问题。照片A和C具有相同的比例。我需要让他们两个排名第一。

2 个答案:

答案 0 :(得分:1)

如果你的意思是“返回1”作为返回1的排名记录? - >未经测试,但它可以组合GROUP BY和GROUP_CONCAT,如下所示:

SELECT Won, Lost, Played, GROUP_CONCAT( photo, ', ' ) AS photos
FROM your_table
GROUP BY Won, Lost, Played

答案 1 :(得分:1)

未经测试

SELECT *
FROM photos
ORDER BY (played/lost)

我认为它会回归:

Photo A // rank1
Photo C // rank1
Photo B // rank2