Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menghitung peringkat persentil di MySQL

Inilah pendekatan berbeda yang tidak memerlukan gabungan. Dalam kasus saya (tabel dengan 15.000+) baris, ini berjalan dalam waktu sekitar 3 detik. (Metode JOIN membutuhkan urutan besarnya lebih lama).

Dalam sampel, asumsikan bahwa mengukur adalah kolom tempat Anda menghitung persentase peringkat, dan id hanyalah pengidentifikasi baris (tidak wajib):

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

Penghargaan untuk metode ini diberikan kepada Shlomi Noach. Dia menulis tentang itu secara rinci di sini:

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

Saya telah menguji ini di MySQL dan berfungsi dengan baik; tidak tahu tentang Oracle, SQLServer, dll.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Performance UNION vs OR

  2. Haruskah koneksi database tetap terbuka sepanjang waktu atau hanya dibuka saat dibutuhkan?

  3. Buat Terowongan SSH untuk Akses Jarak Jauh MySQL

  4. Apa gunanya prosedur tersimpan?

  5. Bagaimana cara memilih tanggal dan waktu tanpa detik di mysql?