LINUX.ORG.RU

SQL-запрос (postgresql / tsearch2)

 , , tsearch2, tsvector


0

1

Помогите поправить запрос, уже что то не могу сообразить. Простая таблица: id | player | message | time.

Хочу посчитать количество употребления слов в таблице за последние сутки таким запросом:

select nentry,word AS normal,to_tsvector('ru',word) AS inf
from ts_stat('select to_tsvector(message) from tw_chat where time>now()-INTERVAL ''1 week''')
WHERE nentry>1 AND length(word)>=4 
ORDER BY nentry DESC LIMIT 2000

В общем он работает как нужно, возвращает таблицу в виде «количество слов | слово | начальная форма слова (to_tsvector('ru',word))».

Хочется сгрупировать в этом результате все слова по их начальной форме, То есть, например, чтобы слова «прыгай» и «прыгал» образовали одну запись вместо двух. Обычный GROUP BY не подходит потому что в результате мне нужна первая и вторая колонка, следовательно GROUP BY можно делать только по ней. Во второй колонке хочу получить употребленное слово этой формы(видимо любое из слов «прыгай» и «прыгал» в примере)

★★★

Последнее исправление: disarmer (всего исправлений: 2)

В мускуле есть чего-то типа pronounce() или как-то так. в ПГ должно быть по-любому. Сравнивает произношение слов.

ziemin ★★
()
Ответ на: комментарий от ziemin

нене, произношение мне не нужно, нужно идею как сгруппировать результат этого запроса. Вроде это должно быть просто, только в голову ничего не приходит

disarmer ★★★
() автор топика

То есть, например, чтобы слова «прыгай» и «прыгал» образовали одну запись вместо двух

в результате мне нужна первая и вторая колонка

Тогда что-то типа

select sum(nentry),min(word) AS normal,to_tsvector('ru',word) AS inf
from ts_stat('select to_tsvector(message) from tw_chat where time>now()-INTERVAL ''1 week''')
WHERE nentry>1 AND length(word)>=4 
ORDER BY nentry DESC LIMIT 2000
GROUP BY to_tsvector('ru',word)
monk ★★★★★
()
Ответ на: комментарий от monk

Действительно, это то что нужно) спасибо!

disarmer ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.