Mysql 中的排名值

Rank values in Mysql

我找不到解决方案。我需要制作一个从最高值到最低值排名的列 (column bedrag)。如果这些值相同,则具有最高数字的值 ( column spelersnr ) 'wins'。 我希望你能帮助我。

这就是我到目前为止所得到的。

SELECT    s.spelersnr, 
          naam , 
          (select max(bedrag) from boetes b  where b.spelersnr = s.spelersnr) as mbedrag,
          @curRank := @curRank + 1 AS POSITIE
FROM      spelers s, (SELECT @curRank := 0) r
ORDER BY  mbedrag ;

鉴于您使用的是MySQL 8+,您可以尝试使用此处的ROW_NUMBER功能。此外,我们可以使用连接重写您的查询,以消除 select 子句中的相关子查询:

SELECT s.spelersnr, s.naam,
    ROW_NUMBER() OVER (ORDER BY b.mbedrag DESC, s.spelersnr DESC) rn
FROM spelers s
INNER JOIN
(
    SELECT spelersnr, MAX(bedrag) AS mbedrag
    FROM boetes
    GROUP BY spelersnr
) b
    ON s.spelersnr = b.spelersnr
ORDER BY
    b.mbedrag;