gpt4 book ai didi

sql - 计算重复项时自加入 vs 分组

转载 作者:行者123 更新时间:2023-12-02 03:37:36 24 4
gpt4 key购买 nike

我正在尝试根据 Oracle 数据库中表的列来计算重复项。此查询使用分组依据:

select count(dockey), sum(total)
from
(
select doc1.xdockeyphx dockey, count(doc1.xdockeyphx) total
from ecm_ocs.docmeta doc1
where doc1.xdockeyphx is not null
group by doc1.xdockeyphx
having count(doc1.xdockeyphx) > 1
)

返回 count = 94408sum(total) = 219330。我认为这是正确的值。

现在,使用自连接尝试另一个查询:

select count(distinct(doc1.xdockeyph))
from ecm_ocs.docmeta doc1, ecm_ocs.docmeta doc2
where doc1.did > doc2.did
and doc1.xdockeyphx = doc2.xdockeyphx
and doc1.xdockeyphx is not null
and doc2.xdockeyphx is not null

结果也是 94408 但是这个:

select count(*)
from ecm_ocs.docmeta doc1, ecm_ocs.docmeta doc2
where doc1.did > doc2.did
and doc1.xdockeyphx = doc2.xdockeyphx
and doc1.xdockeyphx is not null
and doc2.xdockeyphx is not null

正在返回 1567466,我认为这是错误的。

我用来查找重复项的列是 XDOCKEYPHX,DID 是表的主键。

为什么sum(total)的值和上次查询的结果不一样?我不明白为什么最后一个查询返回的重复行比预期的多。

最佳答案

您不需要最后一个 where 子句的复杂性

where doc1.did > doc2.did
and doc1.xdockeyphx = doc2.xdockeyphx
and doc1.xdockeyphx is not null
and doc2.xdockeyphx is not null

如果您考虑一下,如果 doc1.xdockeyphx 不为 null,则 doc2.xdockeyphx 不能为 null。也许通过连接表更好地表达....

select count(*)
from ecm_ocs.docmeta doc1
join ecm_ocs.docmeta doc2
on doc1.xdockeyphx = doc2.xdockeyphx
where doc1.xdockeyphx is not null and doc1.did > doc2.did

您的前两个查询报告不同/分组的结果,而您的最后一个查询只报告所有结果,这就是计数不同的原因。

关于sql - 计算重复项时自加入 vs 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22381018/

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