2012-07-10 49 views
0

我目前有一個包含497k個單詞的表。每個單詞及其在英語中的相對頻率是一排。我想創建另一個列,根據它們的頻率從1到497k(此列表中的單詞數)排序,最高頻率爲1,依此類推。我怎樣才能做到這一點?我使用MySQL的54年5月1日根據另一列值的順序對錶中的所有行進行編號

+0

就可以開始編寫一個查詢,我們將幫助您解決問題和改進 – Ibu 2012-07-10 16:22:07

+0

這樣做有什麼目的時,你可以放置一個'ORDER BY'在您的檢索報告中? – 2012-07-10 16:22:20

+0

-1簡單計數(B),然後按順序排列。 – 2012-07-10 16:23:08

回答

1

我想出這個(複雜的,但也許快)一個語句的解決方案:

update vocabulary SET rank = 

(
SELECT ranking.rank FROM (
    SELECT @rownum:[email protected] + 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 
); 

我相信這可以進一步optimzed但它可能是一個很好的起點指出有一個單一的聲明的解決方案。

此外,這可能仍然存在排名不同但詞頻相同的行。

這裏是一個SQL搗鼓它: http://sqlfiddle.com/#!2/a00e2/1

+0

看起來很棒!我從來沒有見過sqlfiddle。我會盡快嘗試。 Ty – user1515381 2012-07-10 17:11:56

+0

很高興爲您效勞。 :) – 2012-07-10 17:17:31

+0

它沒有工作:/。我忘了提到同一個詞可以多次出現。數據庫中的唯一條目由一個詞和一個PoS標籤組成。我在亂搞你的代碼,但無法讓它取出PoS標籤。任何幫助? – user1515381 2012-07-10 19:16:34

相關問題