0

私は現在、497k語のテーブルを持っています。英語での各単語とその相対頻度は1行です。頻度に基づいて1から497k(このリストの単語数)の順に並べる別の列を作成したいと思います。最も高い頻度は1などです。これどうやってするの?MySQL5.1.54を使用しています

4

1 に答える 1

1

私はこの(複雑ですが、おそらく速い)ワンステートメントソリューションを思いつきました:

update vocabulary SET rank = 

(
SELECT ranking.rank FROM (
  SELECT @rownum:=@rownum + 1 as rank, voca.word
  FROM 
      (
        SELECT v.word, v.frequency
        FROM vocabulary v
        ORDER BY v.frequency DESC
      ) voca,
     (SELECT @rownum := 0) r
) ranking
WHERE ranking.word = vocabulary.word
);

これはさらに最適化できると確信していますが、これを 1 つのステートメントで解決することは良い出発点になるかもしれません。

さらに、これには、単語は異なるが頻度が同じである行のランク付けに問題がある可能性があります。

ここにSQLフィドルがあります: http://sqlfiddle.com/#!2/a00e2/1

于 2012-07-10T17:01:38.927 に答える