我有下表:
我想做的是组:
firstname
和address
对此类数据进行分组
| 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)+'%'
但该查询似乎不起作用。
有什么想法吗?谢谢!
答案 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)
这就是你想要的吗?