[英]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.