Группа SQL по шаблону LIKE - PullRequest
1 голос
/ 07 января 2010

У меня есть следующая таблица: что я хочу сделать, это группа: группировать по firstname и address по данным такого рода

| firstname | address
+-----------+----------
| alex      | 338 s. michigan 
| mark      | finger
| alex      | 338 south michigan
| ted       | port

Но группа по не вернет аналогичные значения поля address.

Есть ли шаблон, к которому я могу применить группу? Я хочу использовать систему шаблонов LIKE. например:

select firstname, address from t group by firstname, '%'+SUBSTRING(address,0,5)+'%' 

но этот запрос, похоже, не работает.

Есть идеи? Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 января 2010

, если подстрока может появиться в любой позиции на другом адресе, вы можете сделать соединение как:

select a.id, a.addr, b.id as b_id, b.addr as b_addr from t a, t b where
    b.addr like concat('%', substr(a.addr, 0, 5), '%') and
    b.id <> a.id;

вернет все записи, чьи первые 5 символов адреса находятся где-либо внутри другого адреса.

или вы можете просто игнорировать материал после символа 5 с группой:

select firstname, substr(addr, 0, 5) from t group by firstname,
  substr(addr, 0, 5);

вы можете использовать инструмент для нормализации почтовых адресов, например:

https://webgis.usc.edu/Services/AddressNormalization/Default.aspx

(бесплатно до 2500 записей)

2 голосов
/ 07 января 2010

Если вы также хотите сгруппировать по первым 5 символам адреса, вы можете сделать это:

select firstname, MAX(address) AS Address
from t 
group by firstname, SUBSTRING(address,0,5)

Это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...