SQL 按 LIKE 模式分组

标签 sql group-by

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

| 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/

相关文章:

sql - 如何实现SQL查询功能

php - 得到分组记录的总和

mysql - SQL Varchar 到毫秒

sql - 使用 MySQL 搜索多个表

mysql - 如何使用多个连接优化 MySQL 查询?

python - 在 Python 中使用奇数创建行计数

mysql - 如何选择今天最受欢迎的行

mysql - 需要 MySQL 帮助

php - 用户特定的 GROUP BY/ORDER BY/LIMIT WHERE 的 mySQL PDO SELECT(两个链表)

sql - 使用 GROUP BY 子句时 SELECT DISTINCT 是否总是多余的?