3

数据库有表persons

id          int
points      int
voted_on    int 
other columns

我想知道带有idx 的行具有哪个行排名,具有相同点的行具有相同的行排名。这个查询工作得很好而且很快:(但如果你知道更好的,请告诉我:)

select count(*)
from persons p cross join
     (select points from persons p where p.id = x) const
where p.points > const.points;

但现在我想升级查询,即投票数较少但得分相同的人比投票数较多的人具有更好的行排名。但是,具有相同点数和 voted_on 的人应该具有相同的行排名。

4

1 回答 1

1

你需要一个更复杂的where子句:

select count(*)
from persons p cross join
     (select points, voted_on from persons p where p.id = x) const
where (p.points > const.points) or
      (p.points = const.points and p.voted_on >= const.voted_on)

我不确定“更好”是指较低等级还是较高等级。如果更大,这会给人们更高的等级voted_on。对于较低的等级,将 更改>=<=

编辑:

我相信这适用于“最低”行排名(根据您的评论):

select count(*) + 1
from persons p cross join
     (select points, voted_on from persons p where p.id = x) const
where (p.points > const.points) or
      (p.points = const.points and p.voted_on > const.voted_on)

这将从“1”而不是“0”开始排名。

于 2013-06-05T17:58:55.703 回答