-1

閲覧回数でページをランク付けするSQLクエリを作成しました。例えば、

╔══════╦═══════╗
║ PAGE ║ VIEWS ║
╠══════╬═══════╣
║ J    ║   100 ║
║ Q    ║    77 ║
║ 3    ║    55 ║
║ A    ║    23 ║
║ 2    ║     6 ║
╚══════╩═══════╝

ここで、SQLクエリを使用して各ページのパーセンタイルランクを見つけます。これに使用したい計算は非常に単純です。すでに生成されたテーブルの行番号を行の総数で割ったものを取得したいだけです。または、私の興味に応じて、1からこの値を引いたもの。

このようにすでに生成されたテーブルでCOUNT(ページ)を実行できますか?これが、行の総数を取得する方法だと思います。しかし、行番号を返すコマンドはありますか?

私の質問をさらに明確にするために、次の結果が必要です

╔══════╦════════════════╗
║ PAGE ║ Percentile     ║
╠══════╬════════════════╣
║ J    ║   (1-1/5)*100  ║
║ Q    ║   (1-2/5)*100  ║
║ 3    ║   (1-3/5)*100  ║
║ A    ║   (1-4/5)*100  ║
║ 2    ║   (1-5/5)*100  ║
╚══════╩════════════════╝

または一般的に(1-(行番号)/(COUNT(ページ))* 100

4

2 に答える 2

2
SELECT  page, 
        views,
        (1-ranks/totals)*100 Percentile
FROM
(
    SELECT  page,
            views,
            @rank:=@rank + 1 ranks,
            (SELECT COUNT(*) FROM tableName) totals
    FROM    tableName a,
            (SELECT @rank:=0) s
    ORDER   BY views DESC
) s
于 2013-03-06T07:40:27.083 に答える
2

1 つの SQL ステートメントでテーブル全体のパーセンタイル ランクを計算することはできません。ここで John Woo によって提案されたアプローチは、上位数パーセンタイルを意味する、処理されているテーブルの最初の (予測不可能な) パーセントに対して結果が適切に見えるにもかかわらず、上位ランクが計算された後に崩壊します。

その理由は、Oracle Ace Roland Bouman によるこの投稿で説明されています: http://rpbouman.blogspot.com/2009/09/mysql-another-ranking-trick.html

つまり、ユーザー定義変数は、単一の SQL ステートメント内で信頼できるように設計されておらず、複数の SQL ステートメント間でのみ信頼できるように設計されています。

ユーザー定義変数に関する MySQL マニュアルの最初の文を読んでください : http://dev.mysql.com/doc/refman/5.5/en/user-variables.html 1 つのステートメントを作成し、後で別のステートメントで参照します。」

次に、約 10 番目のパラグラフで、次の明確なステートメントを参照してください。ユーザー変数を含む式の評価は定義されていません。"

于 2014-12-25T17:35:29.900 に答える