gpt4 book ai didi

sql - 使用 having 时返回的行数与行数之间的差异

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

看起来,当使用 having 子句时,count(*)having 之前计算,但计算返回的行数后。修复可能是子查询,但如果有可能避免它,我想。我正在使用 count(*) 来避免 no_data_found

此行为发生在 11.2.0.1.0、10.2.0.1.0、9.2.0.7.0 中,因此显然是有意为之,但我不太明白为什么。下面是一个易于复制的示例。

有人知道为什么会这样吗?我本以为 count(*) 会返回 1

create table tmp_test1 as
select level as id, level as val
from dual
connect by level <= 1000
;

Table created.

create table tmp_test2 as
select level as id, level as val
from dual
connect by level <= 1000
;

Table created.

select count(*) as count
from tmp_test1 a
join tmp_test2 b
on a.id = b.id
having max(a.val) = max(b.val)
;

COUNT
----------
1000

select 1 as num_rows
from tmp_test1 a
join tmp_test2 b
on a.id = b.id
having max(a.val) = max(b.val)
;

NUM_ROWS
----------
1

最佳答案

having 子句在组级别运行 - 没有指定分组依据,这意味着它在整个数据集上运行。

这意味着在任何带有 having 子句且没有 group by 子句的查询中,结果只能返回 0 行(如果 having 条件为假)或 1 行(如果 having 条件为真)。

关于sql - 使用 having 时返回的行数与行数之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515067/

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