簡體   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