gpt4 book ai didi

SQL 查找重复条目(组内)

转载 作者:行者123 更新时间:2023-12-01 07:03:41 27 4
gpt4 key购买 nike

SQL 查找重复条目(组内)

我有一个小问题,我不确定解决它的最佳方法是什么,因为我对数据库 (Oracle) 本身的访问权限有限。
在我们的表“EVENT”中,我们有大约 160k 个条目,每个 EVENT 都有一个 GROUPID,一个普通条目正好有 5 行具有相同的 GROUPID。由于一个错误,我们目前得到了几个重复条目(重复,所以 10 行而不是 5 行,只是一个不同的 EVENTID。这可能会改变,所以它只是 <> 5)。我们需要过滤这些组的所有条目。

由于对数据库的访问受限,我们不能使用临时表,也不能向 GROUPID 列添加索引以使其更快。

我们可以通过这个查询获得 GROUPID,但是我们需要第二个查询来获得所需的数据

select A."GROUPID"
from "EVENT" A
group by A."GROUPID"
having count(A."GROUPID") <> 5

一种解决方案是子选择:
select *
from "EVENT" A
where A."GROUPID" IN (
select B."GROUPID"
from "EVENT" B
group by B."GROUPID"
having count(B."GROUPID") <> 5
)

如果没有 GROUPID 和 160k 条目的索引,这将花费太长时间。
尝试考虑可以处理此问题的连接,但到目前为止找不到好的解决方案。

任何人都可以为此找到一个好的解决方案吗?

小编辑:
我们这里没有 100% 重复,因为每个条目仍然有一个唯一的 ID,而 GROUPID 也不是唯一的(这就是我们需要使用“分组依据”的原因) - 或者我只是错过了一个简单的解决方案:)

关于数据的小例子(我不想删除它,只需找到它)

EVENTID | GROUPID | TYPEID

123456    123       12

123457    123       145

123458    123       2612

123459    123       41

123460    123       238



234567    123       12

234568    123       145

234569    123       2612

234570    123       41

234571    123       238

它有更多的列,如时间戳等,但正如您已经看到的,除了 EVENTID 之外,所有内容都是相同的。

我们将更频繁地运行它进行测试,以找到错误并检查它是否再次发生。

最佳答案

分析查询要解决的一个经典问题:

select eventid,
groupid,
typeid
from (
Select eventid,
groupid,
typeid,
count(*) over (partition by group_id) count_by_group_id
from EVENT
)
where count_by_group_id <> 5

关于SQL 查找重复条目(组内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/182544/

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