繁体   English   中英

MySQL:选择一个优胜者,返回他们的排名

[英]MySQL: SELECT a Winner, returning their rank

早些时候我问了这个问题该问题基本上是询问如何在表中列出10个获胜者,根据他们的观点。

回答了。

现在,我想在表格中搜索给定的获胜者X,并找出按点对表格进行排序时他所处的位置

例如,如果这是表:

     Winners:
NAME:____|__POINTS:
Winner1  |  1241
Winner2  |  1199
Sally    |  1000
Winner4  |  900
Winner5  |  889
Winner6  |  700
Winner7  |  667
Jacob    |  623
Winner9  |  622
Winner10 |  605
Winner11 |  600
Winner12 |  586
Thomas   |  455
Pamela   |  434
Winner15 |  411
Winner16 |  410

这些是我想做的可能的输入和输出:

Query:  "Sally", "Winner12", "Pamela", "Jacob"
Output: 3        12          14        623

我怎样才能做到这一点? 是否可以仅使用MySQL语句? 还是我也需要PHP?

这是我想要的东西:

WHEREIS FROM Winners WHERE Name='Sally' LIMIT 1

有想法吗?

编辑-注意:您不必处理两个优胜者拥有相同积分的情况(为简单起见,假设不会发生这种情况)。

我认为这将为您带来预期的结果。 请注意,我会正确处理目标获胜者与另一获胜者并列积分的情况。 (两者的位置相同)。

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')

编辑
我想“插上” 伊格纳西奥·巴斯克斯(Ignacio Vazquez-Abrams)的答案,从几个方面来说,这比上面的要好。
例如,它允许列出所有(或几个)获奖者及其当前位置。
另一个优点是,它允许表达更复杂的条件以指示给定玩家在另一个玩家之前(参见下文)。 阅读incrediman关于不会有“联系”的评论,促使我对此进行了研究。 可以对查询进行如下修改,以处理玩家拥有相同点数时的情况(以前为这些玩家提供了相同的位置值,现在位置值进一步与其相对的起始值相关联)。

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause
SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE w2.points > w1.points
)+1 AS rank
FROM winners AS w1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM