Mysql
 sql >> база данни >  >> RDS >> Mysql

Изчисляване на процентилен ранг в MySQL

Ето един различен подход, който не изисква присъединяване. В моя случай (таблица с 15 000+) реда се изпълнява за около 3 секунди. (Методът JOIN отнема с порядък повече време).

В извадката приемете, че мярка е колоната, на която изчислявате процента на ранга и id е само идентификатор на ред (не се изисква):

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

Заслуга за този метод е на Шломи Ноач. Той пише за това подробно тук:

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

Тествах това в MySQL и работи страхотно; нямам представа за Oracle, SQLServer и т.н.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да съхранявам .txt файлове MySQL база данни?

  2. OSX ld:библиотеката не е намерена за -lssl

  3. вземете СУМАТА на всяко лице от PersonID

  4. Инсталация на MYSQL с приложение .NET winforms

  5. Къде да използвате mysql_real_escape_string за предотвратяване на SQL инжектиране?