SQL组按LIKE模式

时间:2010-01-07 09:09:54

标签: sql group-by

我有下表: 我想做的是组:  firstnameaddress对此类数据进行分组

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

但是,group by不会返回address字段的类似值。

我可以通过这种模式申请吗?我想使用LIKE模式系统。例如:

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

但该查询似乎不起作用。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:3)

如果子字符串可以出现在另一个地址的任何位置,您可以进行如下连接:

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个地址字符出现在另一个地址内的任何记录的所有记录。

或者你可以忽略char 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条记录)

答案 1 :(得分:2)

如果你想按地址的前5个字符分组,你可以这样做:

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

这就是你想要的吗?