sql >> Databáze >  >> RDS >> Mysql

Výpočet percentilového hodnocení v MySQL

Zde je jiný přístup, který nevyžaduje připojení. V mém případě (tabulka s 15 000+) řádky běží asi za 3 sekundy. (Metoda JOIN trvá řádově déle).

V ukázce předpokládejme, že měřit je sloupec, pro který počítáte procentuální hodnocení a id je pouze identifikátor řádku (není povinný):

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

Zásluhu na této metodě má Shlomi Noach. Podrobně o tom píše zde:

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

Testoval jsem to v MySQL a funguje to skvěle; nemám ponětí o Oracle, SQLServer atd.



  1. Osvědčený postup pro volné propojení mezi daty a uživatelským rozhraním v systému Android – Adaptér, Filtr, CursorLoader a ContentProvider

  2. SQLite unie

  3. Nasazení zabezpečené multicloudové replikace MySQL na AWS a GCP s VPN

  4. Bílá stránka jednoduchého přihlašovacího skriptu php