Her er en anden tilgang, der ikke kræver tilslutning. I mit tilfælde (en tabel med 15.000+) rækker kører den på cirka 3 sekunder. (JOIN-metoden tager en størrelsesorden længere).
I eksemplet antages det mål er den kolonne, hvorpå du beregner den procentvise rangering og id er kun en række-id (ikke påkrævet):
SELECT
id,
@prev := @curr as prev,
@curr := measure as curr,
@rank := IF(@prev > @curr, @[email protected], @rank) AS rank,
@ties := IF(@prev = @curr, @ties+1, 1) AS ties,
([email protected]/@total) as percentrank
FROM
mytable,
(SELECT
@curr := null,
@prev := null,
@rank := 0,
@ties := 1,
@total := count(*) from mytable where measure is not null
) b
WHERE
measure is not null
ORDER BY
measure DESC
Æren for denne metode går til Shlomi Noach. Han skriver om det i detaljer her:
http://code.openark.org/blog/mysql /sql-ranking-without-self-join
Jeg har testet dette i MySQL, og det fungerer godt; ingen idé om Oracle, SQLServer osv.