找到邮政编码匹配的拼写错误的城市的人

时间:2016-06-30 22:36:40

标签: sql oracle11g

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

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

我无法弄清楚我的下一步。

以下是我的开始:

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

这样做会导致

Albuqureque     87108        1
Albuquerque     87108      238
Albuqerque      87109        1
Albuquerque     87109       34

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

1 个答案:

答案 0 :(得分:1)

这很难,因为一些“城市”的居民很少。而且,某些邮政编码可能只占一个城市的一小部分。

我会推荐两条规则:

  • 查看至少包含一定数量人物的邮政编码 - 比如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;