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

У меня есть стол как

id type note
1   A   ab cd
1   B   cdef
1   A   abd
1   A   abcd

Я хочу получить все уникальные заметки после удаления пробела, поэтому мой результат будет таким

id type note
1   A   ab cd
1   A   abd
1   B   cdef

потому что после удаления пробелов ab cd и abcd будут одинаковыми. Я использую Postgres. Обратите внимание, что столбец id не уникален.

2 ответа

Решение

Это классический групповой максимум, но вы просто группируете его по выражению, а не по столбцу

SELECT id, type, note FROM
  (SELECT DISTINCT ON(replace(note,' ',''))
     id
     ,type
     ,note
   FROM table1
   ORDER BY replace(note,' ','')
  ) AS q

http://sqlfiddle.com/

Поскольку вы, кажется, используете Rails (в соответствии с вашими тегами), вы также можете использовать ActiveRecord, чтобы получить все ваши уникальные экземпляры note, не учитывая любые пробелы:

WhateverModel.pluck("REPLACE(note, ' ', '')").uniq
Другие вопросы по тегам