【问题标题】:Determine the rank of each row in a sorted table [duplicate]确定排序表中每一行的排名[重复]
【发布时间】:2012-02-19 04:47:00
【问题描述】:

假设我有这张桌子:

ID Score
1   345
2   5
3   76
4   45
5   85
6   175
7   209

这是我的查询:

SELECT * FROM posts ORDER BY Score DESC

如何获得每一行行的排名/位置?

【问题讨论】:

  • ^但是我将迭代结果(没有 where 语句),而不仅仅是关注单行。
  • 这意味着我没有选择单行,而是选择了所有行。
  • 如果您要用某种语言迭代结果,您肯定可以跟踪那里的排名吗?如果它是短暂的并且仅在您查询时应用,则不需要让数据库提供给您。
  • 在直接查询中如果没有 where 语句是不可能的。如果在 where 子句中没有提及 id 或 score,您将无法获得该特定行的位置。
  • @JimGarrison,你把我带到了那里!谢谢。

标签: php mysql


【解决方案1】:

您可以像这样使用上面链接的@OMG Ponies 之类的技术:

SELECT posts.*, @row:=@row+1 as 'rank' FROM posts, (SELECT @row:=0) r ORDER BY posts.Score DESC

【讨论】:

    【解决方案2】:

    如果您运行以下代码,您将看到新列为Position,与Rank 相同

    SELECT ID, Score, 
    (SELECT COUNT(distinct u2.Score) FROM myTable u2 
    WHERE 
    u2.Score > u1.Score) + 1 AS position FROM myTable u1
    ORDER BY position
    

    如果您有任何问题,请告诉我...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 2018-05-06
      • 2019-09-18
      相关资源
      最近更新 更多