sql >> データベース >  >> RDS >> Mysql

MySQLでパーセンタイルランクを計算する

    これは、結合を必要としない別のアプローチです。私の場合(15,000以上のテーブル)、約3秒で実行されます。 (JOINメソッドは1桁長くかかります。)

    サンプルでは、​​測定と仮定します パーセントランクを計算している列であり、 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
    

    この方法の功績はShlomiNoachにあります。彼はそれについてここに詳細に書いています:

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

    私はこれをMySQLでテストしましたが、うまく機能します。 Oracle、SQLServerなどについてはわかりません。



    1. 一時テーブルからフィールド名を取得する方法(SQL Server 2008)

    2. Robolectricアクセスデータベースはエラーをスローします

    3. Oracleでロックされた行を見つける方法

    4. DBユーザーパスワードをコマンドラインツールmysqladminに渡す方法はありますか?