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;
我找不到解决方案。我需要制作一个从最高值到最低值排名的列 (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;