2017-09-28 10 views
0

는이 전 테이블 shortText 있다고 가정 해 봅시다 :카운트 단어

ID | SHORT_TEXT 
------+--------------------------- 
001 | The elephants went in two by two 
002 | Needles and haystack 
003 | Somewhere over the rainbow 
... 

같은 결과를 얻을 수 (저장 프로 시저를 사용하지 않고) 열 SHORT_TEXT에서 각 단어의 선두로부터 카운트하는 shortText를 조회하는 방법

WORD | OCCURENCE 
------+------------ 
the | 2 
and | 1 
over | 1 
... 

편집 :

더 일반적인 대답 제공하기 (단어의 변수 번호가 주어진 최대없이) 없다 지금까지는 에드.

+0

무엇을 시도 했습니까? SQL 쿼리 또는 저장 프로 시저는 어디에 있습니까? –

+0

[VARCHAR 필드에서 문자열의 발생 횟수를 계산 하시겠습니까?] (https://stackoverflow.com/questions/12344795/count-the-number-of-occurrences-of-a-string-in- a-varchar-field) – ASOlivieri

+0

https://stackoverflow.com/questions/1094888/counting-word-occurrences-in-a-table-column –

답변

1

이론상으로, "shortText"문자열을 개별 단어 (IE로 공백을 나누는 문자열)로 나눈 다음 모든 배열을 하나의 거대한 목록으로 결합하고 단어를 계산하려고합니다. MySQL에서 이 너무 많이하지만, 나는 아래 PostgreSQL을의 원리를 설명 할 수 있습니다 요구 될 수있다

select word,count(*) occurrence 
    from 
(select 
    unnest(string_to_array(lower(short_text),' ')) word 
    from shortText) words 
group by words.word 
order by count(*) desc 
1

난 당신이 열을 전체 텍스트 인덱스를 작성하는 경우, 당신이 만든 테이블에서 단어를 얻을 수 있다고 생각 문자열의 토큰 화를 지원합니다. 인덱스 ....

SELECT word, doc_count, doc_id, position FROM INNODB_FT_INDEX_TABLE 

또는

SELECT word,count(*) FROM INNODB_FT_INDEX_TABLE group by word; 

등을 구축하면

이 꽤 잘 설명

.... https://dev.mysql.com/doc/refman/5.6/en/innodb-ft-index-table-table.html

여기 쿼리입니다 ....

참고 : 테스트하지는 않았지만 Orac에서 비슷한 결과를 보았습니다. 르.

+0

또 다른 메모는 기본적으로 MYSQL은 3 자 미만의 토큰을 저장하지 않으므로 모든 단어를 원하면 해당 동작을 변경해야합니다. – markg

+0

감사합니다. 불행히도 이것은 InnoDB 테이블을 위해서만 작동합니다. 내 색인 MyISAM 테이블에있는 열에 있습니다. 해당 유형에 대한 색인이 아직 저장되지 않은 위치를 파악할 수 없었습니다 ... – Benvorth