2014-11-08 6 views
3

Я создал таблицу, которая заполнена ответами людей, заявленных как первое, что пришло им в голову, когда они просматривали фотографию. У меня есть ~ 1400 записей. Теперь я хочу посмотреть, что является самым распространенным описанием.Подсчитайте наиболее часто используемые слова в таблице, отфильтруйте стоп-слова

CREATE TABLE descript (
wordID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
wordText TEXT(50) 
) 
ENGINE=MyISAM; 

INSERT INTO descript VALUES(0,"Big"); 
INSERT INTO descript VALUES(0,"blue"); 
INSERT INTO descript VALUES(0,"blue"); 
INSERT INTO descript VALUES(0,"fast"); 
INSERT INTO descript VALUES(0,"impressive"); 
INSERT INTO descript VALUES(0,"big"); 
INSERT INTO descript VALUES(0,"big"); 
INSERT INTO descript VALUES(0,"red"); 
INSERT INTO descript VALUES(0,"his"); 
INSERT INTO descript VALUES(0,"her"); 
INSERT INTO descript VALUES(0,"His"); 
INSERT INTO descript VALUES(0,"Black"); 
INSERT INTO descript VALUES(0,"black"); 
INSERT INTO descript VALUES(0,"black"); 
INSERT INTO descript VALUES(0,"blue"); 
INSERT INTO descript VALUES(0,"a black"); 
INSERT INTO descript VALUES(0,"his"); 
INSERT INTO descript VALUES(0,"her"); 
INSERT INTO descript VALUES(0,"pleasant"); 
INSERT INTO descript VALUES(0,"the fast"); 
INSERT INTO descript VALUES(0,"blue"); 

и дальше и дальше и дальше ....

Я должен сделать это так, то в нижнем регистре, что делается с этим:

select LOWER(wordText) descript; 

Как я могу идти о имея в виду самый общий ответ и отображать его? У меня есть несколько стоп-слова (что я не хочу быть включены в счет, таких как «а» или ". Как я могу идти о том, они не рассчитывали?

ответ

1

Основной запрос:

SELECT lower(wordText) as word, count(*) 
FROM descript 
GROUP BY lower(wordText) 
ORDER BY count(*) DESC 
LIMIT 1; 

Вы можете удалить стоп-слова с помощью not in, если вы хотите, чтобы включить их в запросе:

SELECT lower(wordText) as word, count(*) 
FROM descript 
WHERE lower(wordText) not in ('a', 'the', . . .) 
GROUP BY lower(wordText) 
ORDER BY count(*) DESC 
LIMIT 1; 

В качестве альтернативы, если они у вас есть в таблице:

SELECT lower(sw.wordText) as word, count(*) 
FROM descript d left join 
    stopwords sw 
    on d.wordText = sw.word 
WHERE sw.word is not null 
GROUP BY lower(sw.wordText) 
ORDER BY count(*) DESC 
LIMIT 1; 

Вы можете узнать о словах остановки, включенных в MySQL here.

+0

@ RADAR. , , Это * будет иметь гораздо больше смысла;) –

0

Если вы делаете

SELECT COUNT(LOWER(wordText)) FROM descript GROUP BY LOWER(wordText); 

вы должны быть в состоянии увидеть, сколько у каждого слова есть.

можно добавить пункт

ORDER BY 

расположить их на основе подсчета каждого результата

0

Как получить наиболее частое значение, вы можете использовать этот запрос.

SELECT wordText, count(*) FROM descript GROUP BY wordText ORDER BY count(*) DESC LIMIT 1; 
Смежные вопросы