Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính toán xếp hạng phần trăm trong MySQL

Đây là một cách tiếp cận khác không yêu cầu tham gia. Trong trường hợp của tôi (một bảng có hơn 15.000) hàng, nó chạy trong khoảng 3 giây. (Phương thức JOIN có thứ tự độ lớn dài hơn).

Trong mẫu, giả sử rằng đo lường là cột mà bạn đang tính toán xếp hạng phần trăm và id chỉ là một định danh hàng (không bắt buộc):

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

Tín dụng cho phương pháp này thuộc về Shlomi Noach. Anh ấy viết chi tiết về nó ở đây:

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

Tôi đã thử nghiệm điều này trong MySQL và nó hoạt động rất tốt; không biết gì về Oracle, SQLServer, v.v.



  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:Lỗi cú pháp với giao nhau?

  2. Lỗi cú pháp MySQL trong câu lệnh WHILE

  3. Thứ tự LaravelBằng số lượng mối quan hệ

  4. Làm thế nào để đếm các mặt hàng trên mỗi danh mục?

  5. Làm cách nào để kết nối ứng dụng Android với cơ sở dữ liệu MySQL?