我有下表:
我想做的是分组:
对此类数据按 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)+'%'
但该查询似乎不起作用。
有什么想法吗?谢谢!
最佳答案
如果子字符串可以出现在另一个地址的任何位置,您可以进行如下连接:
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 条记录)
关于SQL 按 LIKE 模式分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019228/