sql - 按地址相似但经纬度不同的 SQL 分组
问题描述
我有一个大型 Postgres 数据集表,表 ('tbl') 有 4 列,数据类似于:
ID | 地址 | x,y |
---|---|---|
1 | 22 E 4th Ave, Cordele, GA, 11015 | x1,y1 |
2 | 22 E 4th Ave, Cordele, GA 11015 | x2,y2 |
3 | 408 E 5th Ave, Cordele, CA 11215 | x2,y2 |
4 | 408 E 5th Ave, Cordele, CA, 11215 | x2,y2 |
5 | 408 E 5th Ave, 维克, VA, 11215 | x2,y2 |
6 | 408 E 5th Ave, 维克, VA, 11215 | x3,y3 |
我的问题是,如何找到所有具有相似地址的地址(相似地址意味着忽略状态和 zip 之间的逗号,这是唯一应该忽略的部分),但是具有不同的 'x,y' 值
在上面的示例中,应该返回 id 1 和 2,因为它们具有相同的地址(逗号中带有差异)但不同的 'x,y' 值。
不应返回 ID 3 和 4,因为它们的 'x,y' 值相同。
不应返回 ID 5 和 6,因为它们的地址值相同。
*我可以指望地址格式总是有一个状态和一个zip
解决方案
这可能有点矫枉过正,但你可以删除所有逗号并进行比较吗?
select array_agg(distinct address)
from t
group by replace(address, ',', '')
having min(x_y) <> max(x_y);
要专门删除该逗号,您可以改用:
select array_agg(distinct address)
from t
group by (case when address like '%, _____'
then left(address, -7) || right(address, 6)
else address
end)
having min(x_y) <> max(x_y);
推荐阅读
- python - 如何将我的 Django 项目中的 jupyter-lab 连接到 Django 的模型?
- python - 如何将数组作为词嵌入,类似于 tf.keras.datasets.imdb.get_word_index?
- typescript - 函数返回类型取决于作为参数的 keyof 接口
- javascript - 对不同的输入反应本机动态输入形式相同的值
- python - 如何将邮件转换为 eml?
- c# - 如何从 asp.net MVC 操作方法执行 Saml 发布
- excel - 在数据透视表中过滤动态
- python - 从表中打印特定行
- python - python在特殊列的数据框中查找字符串
- python - 具有不同 dtype 的结构化(记录)数组上的 ufunc(最小值、最大值、平均值等)