我正在尝试创建一份报告,该报告将返回最有可能需要更正城市的人员列表。
我在考虑将数据与表格中的其他数据进行比较,以利用大多数城市拼写正确的假设。以阿尔伯克基为例。我们有许多邮政编码的记录,但城市并不总是拼写正确。
我无法弄清楚我的下一步。
以下是我的开始:
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
我想要做的是,对于每一行,找到邮政编码匹配但城市不匹配的最大记录。如果没有匹配,我想返回该记录,我会用它来返回人们的身份和姓名,因为我很可能需要为那些错误拼写错误的人更正城市的名称。
答案 0 :(得分:1)
这很难,因为一些“城市”的居民很少。而且,某些邮政编码可能只占一个城市的一小部分。
我会推荐两条规则:
有拼写错误的候选人:
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;