Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Berechnung des Perzentilrangs in MySQL

Hier ist ein anderer Ansatz, der keine Verknüpfung erfordert. In meinem Fall (eine Tabelle mit mehr als 15.000 Zeilen) läuft es in etwa 3 Sekunden. (Die JOIN-Methode dauert eine Größenordnung länger).

Nehmen Sie im Beispiel dieses Maß an ist die Spalte, für die Sie den prozentualen Rang berechnen, und id ist nur eine Zeilenkennung (nicht erforderlich):

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

Die Anerkennung für diese Methode geht an Shlomi Noach. Er schreibt darüber ausführlich hier:

http://code.openark.org/blog/mysql /sql-ranking-ohne-self-join

Ich habe dies in MySQL getestet und es funktioniert großartig; keine Ahnung von Oracle, SQLServer etc.