2012-07-10 2 views
0

현재 497k 단어가있는 테이블이 있습니다. 각 단어와 영어의 상대 빈도는 한 행입니다. 나는 그들의 빈도에 따라 1에서 497k (이 목록에 나오는 단어의 수)를 주문할 다른 열을 만들고 싶습니다. 가장 높은 빈도는 1 등입니다. 어떻게해야합니까? 이 더 optimzed 할 수 있습니다 내가 확신다른 열 값의 순서에 따라 테이블의 모든 행 번호를 지정하십시오.

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 
); 

하지만 그것은 좋은 시작이 될 수 있습니다 나는 MySQL은 5.1.54

+0

쿼리를 쓰기 시작할 수 있습니다, 우리는 당신이'ORDER를 배치 할 수 있습니다 이것의 목적은 무엇 당신이 그것을 해결하는 데 도움과 – Ibu

+0

그것을 개선 BY' 귀하의 검색 진술 내에서? –

+0

-1 간단한 카운트 (B) 다음에 의해 오더. –

답변

1

나는이 (복잡하지만, 어쩌면 빠른)와 함께 올 한 문 솔루션을 사용하고 있습니다 이 점에 대해 하나의 문장으로 설명하라.

기타 단어가 같지만 빈도가 같은 행의 순위를 지정하는 데 여전히 문제가있을 수 있습니다. 여기

그것에 대한 SQL 바이올린입니다 : http://sqlfiddle.com/#!2/a00e2/1

+0

멋진데! 전에도 sqlfiddle을 보지 못했습니다. 나는 이것을 최대한 빨리 시도 할 것이다. Ty – user1515381

+0

당신을 도울 수있어서 다행입니다. :) –

+0

작동하지 않았습니다 : /. 나는 같은 단어가 여러 번 나타날 수 있음을 언급하는 것을 잊었다. 데이터베이스의 고유 한 항목은 단어와 PoS 태그로 구성됩니다. 나는 당신의 코드를 어지럽 혀지고 있었지만, PoS 태그를 꺼내지 못한다. 어떤 도움이 필요합니까? – user1515381

관련 문제