Подсчет количества похожих строк в Postgresql - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть таблица, которая содержит список search_terms в Postgresql и количество поисков:

Таблица условий поиска

Я пытаюсьнаписать запрос, который группирует их, т.е. я хочу видеть, что электрический скутер был обыскан 27 раз, а не 20 с 4 ошибками в одну сторону и 3 ошибками в другую.Я хочу использовать функцию подобия, чтобы я мог играть с ограничением.

Я пытался сделать что-то похожее на группирование по сходству, но безуспешно:

SELECT 
search_term,
SUM(count)

FROM 
t2

GROUP BY (SELECT set_limit(0.8);

SELECT similarity(n1.search_term, n2.search_term) AS sim, n1.search_term, n2.search_term
FROM   t2 n1
JOIN   t2 n2 ON n1.search_term <> n2.search_term
               AND n1.search_term % n2.search_term
ORDER  BY sim DESC)

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 22 ноября 2018

Значение 0.8 недостаточно.потому что сходство в вашем примере составляет 0,6 и более

Попробуйте этот запрос

SELECT sim, ss, sum(countt)
  FROM (
    SELECT sim, '|'||string_agg(s1,  '|')||'|' ss
      FROM (
        SELECT similarity(n1.search_term, n2.search_term) AS sim, 
               n1.search_term s1, n2.search_term s2
          FROM t1 n1
          JOIN t1 n2 ON n1.search_term <> n2.search_term
           AND n1.search_term % n2.search_term
           ) t2    
     WHERE sim > 0.6
     GROUP BY sim 
       ) t3
  LEFT JOIN t1 n3 ON ss like '%|'||n3.search_term||'|%' 
 GROUP BY ss, sim
 ORDER BY sim DESC

Вот мой пример - http://sqlfiddle.com/#!17/1d705/35

...