我一直在努力解决我的数据库中的一个问题,这个问题很常见,但到目前为止我找不到解决方案,我希望你能帮我解决这个问题。
我有一个包含人员及其相关地址的数据库。我的主要目标是找出那里有多少独特的家庭。例如,我想把一个家庭算作一个家庭。到目前为止,运行查询以显示last_names和多个地址:
select Last_Name ,add_line1, count(*) from ##all_people
group by Last_Name,ADD_LINE1
having count(*) > 1
这向我显示了具有相同last_name和地址的人,但我需要他们的ID才能将其从我的临时表中删除。
此外,我想询问如何只为每个家庭显示一条记录。
这是我的诱惑结构:
ID First_name Last_Name add_line1
非常感谢你的帮助!!!
答案 0 :(得分:1)
要查找重复项,您可以使用Count()Over()并通过所需的分组进行分区。
driver_options.add_argument("headless")
要查找要删除的内容,可以使用Row_Number()
select * from (
select Id, Last_Name ,add_line1, count(*) over (partition by Last_Name, add_line1) dupe_count from ##all_people
) t
where t.dupe_count > 1
使用select * from (
select Id, Last_Name ,add_line1, row_number() over (partition by Last_Name, add_line1 order by ID) extras from ##all_people
) t
where t.extras > 1
查看每个分组一行
答案 1 :(得分:1)
你似乎在这里有很多问题......
我的主要目标是找出那里有多少独特的家庭。
您可以使用不同的计数来执行此操作:
SELECT COUNT(DISTINCT Last_Name + add_line1)
FROM ##all_people
...但我需要他们的ID才能将它们从我的诱惑中移除
我认为这是通过新的计数查询来解决的。
此外,我想问一下如何只为每个家庭显示一条记录。
只需使用不同的姓氏和地址:
SELECT DISTINCT last_name, add_line1
FROM ##all_people