Postgres Группировка по нечеткой логике - PullRequest
0 голосов
/ 12 марта 2020

Я хочу сгруппировать данные таблицы. но проблема во всех именах не одинакова.

id    name             subject_id
---------------------------------
1     Ganeash          1
2     Ganesha P         2
3     Shree Ganesh Pai 1
4     Gaanesh shree G   1
5     Ramesh shri      2

В этих данных везде Gane sh является общим, поэтому вывод должен содержать.

name    count
-------------
Ganesh  4
Ramesh  1

Если я использую функция Soundex .

postgres=# SELECT soundex('hello world!');
ERROR:  function soundex(unknown) does not exist
LINE 1: SELECT soundex('hello world!');
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Это довольно просто, вам просто нужно разбить текстовое поле на массив слов, а затем unnest массивы на строки. Затем вы управляете строками, используя стандартные SQL (count(), GROUP BY, et c.):

SELECT count(*), 
       unnest(regexp_split_to_array(name, E'\\s+')) AS name2
  FROM names 
 GROUP BY name2
 ORDER BY 1 DESC
0 голосов
/ 12 марта 2020

Вы также можете использовать CASE

select name,count(*) from (
    select case when name like '%Ganesh%' THEN 'Ganesh'
                when name like '%Ramesh%' THEN 'Ramesh' end as name
    from test) a
group by name

Проверить демонстрацию здесь

Выход

enter image description here

...