我在一个rec联盟的网站上工作,希望能列出不同类别的最佳射手。这很简单,但是如果我要进入一个类别的前五名,并且有第一和第二名,但是第三名是三方平手,有没有办法证明这一点呢?

Ex:
Top 3 in Points
1 - Player A (10 pts)
2 – Player B (9 pts)
T3 – Player C (8 pts)
T3 – Player D (8 pts)
T3 – Player E (8 pts)

前百分之十也不会工作,因为新球员进入联盟,我宁愿不必重新计算每个球员的增加。

最佳答案

我不知道您的表结构,所以我将在这里做一些假设,因此根据需要调整表和列名。
第一步是获得前三名:

SELECT DISTINCT
    `score`
FROM
    `points`
LIMIT 3

然后让所有有这些分数的人,把它们放在一起得到:
SELECT
    `name`, -- Whichever fields you have
    `score`
FROM
   `points`
WHERE
    `score` IN (
         SELECT DISTINCT
             `score`
         FROM
             `points`
         LIMIT 3
    )
ORDER BY
    `points` DESC, -- Sort highest score first
    `name` ASC; -- When tied, sort alphabetically

关于mysql - 获得包括领带在内的前N个结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47042636/

10-15 07:44