gpt4 book ai didi

sql - 如何在具有大量记录的表中优化分组依据

转载 作者:行者123 更新时间:2023-12-04 13:04:26 25 4
gpt4 key购买 nike

我有一个包含大量记录(大约 1600 万条)的 Person 表,并且需要找到所有具有相同 lastname 的人。 , firstname的首字母和 birthyear ,在其他世界中,我想在 UI 中显示假设重复的人,供用户分析和决定是否存在同一个人。

这是我写的查询

SELECT * 
FROM Person INNER JOIN
(
SELECT SUBSTRING(firstName, 1, 1) firstNameF,lastName,YEAR(birthDate) birthYear
FROM Person
GROUP BY SUBSTRING(firstName, 1,1),lastName,YEAR(birthDate)
HAVING count(*) > 1
) as dupPersons
ON SUBSTRING(Person.firstName,1,1) = dupPersons.firstNameF and Person.lastName = dupPersons.lastName and YEAR(Person.birthDate) = dupPersons.birthYear
order by Person.lastName,Person.firstName

但由于我不是 SQL 专家,我也想知道,这是不是这样做的好方法?有更优化的方法吗?

编辑

请注意,我可以切割数据,这可以对优化做出贡献

例如,如果我想将数据减少 2,它可以返回两个人
Johan Smith |
Jane Smith | have same lastname and first name inita
Jack Smith |

Mark Tween | have same lastname and first name inita
Mac Tween |

最佳答案

如果性能使用GROUP BY不够用,您可以尝试使用 INNER JOIN

SELECT  *
FROM Person p1
INNER JOIN Person p2 ON p2.PersonID > p1.PersonID
WHERE SUBSTRING(p2.Firstname, 1, 1) = SUBSTRING(p1.Firstname, 1, 1)
AND p2.LastName = p1.LastName
AND YEAR(p2.BirthDate) = YEAR(p1.BirthDate)
ORDER BY
p1.LastName, p1.FirstName

关于sql - 如何在具有大量记录的表中优化分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4956757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com