Работя с база данни с една таблица, която е съставена от 2 колони: целочислен wordID и думата varchar. Таблицата е дълга няколко хиляди реда и е създадена чрез програмно четене на много текст и разделяне на интервал, след което отделните думи се използват и се вмъкват в база данни. Целта е да използвате този речник, за да четете пълнотекстови публикации в блогове, туитове, друго текстово съдържание и да ги оценявате за уместност.
Това, което бих искал да направя, е да изчисля броя на всяка дума (която имам да работи сама), както и "резултата" на всяка дума - тоест една дума се показва минимален брой пъти в набор от данни, за да има резултат, като резултатът е обратен на честотата на думата, по скала от 1-10. Мисълта е, че колкото по-често се появява една дума, толкова по-малко ценна ще бъде тя в моето текстово търсене по-късно. Въпреки това трябва да се появи минимален брой пъти, за да бъде и полезно, защото еднократното вероятно е печатна грешка.
Ето моя оператор select и се опитвам да отбележа честотите на думите едновременно с генерирането на брой.
select word,
count(word),
10*(((max(count(word))+1) - count(word))/(max(count(word))))
from dictwords where length(word)>3 group by word having count(word)>35
order by count(word) desc;
Грешката, върната от mysql, е „Невалидно използване на групова функция“. Грешка 1111.
Възможно ли е да се направи такова нещо в един израз в mySQL? Или трябва да разделя преброяването и точкуването на две заявки, като направя избор в и подавам таблицата си с резултати в таблица със запазени места, след което се опитвам да я оценявам?