查找邮政编码匹配的可能拼写错误的城市



我正在尝试创建一个报告,该报告将返回其城市最有可能需要更正的人的列表。

我正在考虑将这些数据与表中的其他数据进行比较,以利用大多数城市拼写正确的假设。以阿尔伯克基为例。我们有许多邮政编码的记录,但是城市的拼写并不总是正确的。

我不知道下一步该怎么做。

这是我开始的内容:

SELECT city, zip_5_digits, COUNT(*) AS "COUNT"
FROM people
INNER JOIN addresses
ON addresses.people_id = people.id
AND city LIKE 'Albu%que'
GROUP BY city, zip_5_digits

这样做会产生

<>之前阿尔布基87108阿尔伯克基87108 238阿尔布基87109阿尔伯克基87109之前

我想做的是,对于每一行,找到邮政编码匹配但城市不匹配的最大记录。如果没有匹配,我希望返回该记录,我将使用该记录返回人们的id和姓名,因为我很可能需要为那些拼写错误的人更正城市名称。

这很难,因为一些"城市"的居民很少。而且,一些邮政编码可能只包含城市的一小部分。

我要推荐两条规则:

  • 看看至少有一定数量的人的邮政编码——比如100。
  • 看看邮政编码中少于某个数字的城市,比如5。

以下是可能的拼写错误:

SELECT pa.*
FROM (SELECT city, zip_5_digits, COUNT(*) AS cnt,
             MAX(COUNT(*)) OVER (PARTITION BY zip_5_digits) as max_cnt,
             SUM(COUNT(*)) OVER (PARTITION BY zip_5_digits) as sum_cnt
      FROM people p, INNER JOIN
           addresses a
           ON a.people_id = p.id
      GROUP BY city, zip_5_digits
     ) pa
WHERE sum_cnt >= 100 AND cnt <= 5;

相关内容

最新更新