gpt4 book ai didi

Oracle:使用内部选择进行选择

转载 作者:行者123 更新时间:2023-12-01 14:37:50 25 4
gpt4 key购买 nike

我有以下示例:

Select MAX(1) as foo, count(*) as bar From dual

这通过返回 1 作为 foo 和 1 作为 bar 来正确执行。

现在我将创建一个仅返回 foo 的内部选择,保留前面示例中的栏。

Select (Select Max(1) as foo From dual), count(*) as bar From dual

后面的例子会报如下错误:

ORA-00937: not a single-group group function

这可以通过提供(冗余的?)Group By 轻松解决:

 Select (Select Max(1) From dual) as foo, count(*) as bar From dual Group By 1

我的问题如下:既然我们肯定会在内部选择中返回单行(通过提供 MAX 聚合函数),为什么有必要在语句末尾声明一个 group by?另外,这个 group by addition 会对语句的性能产生影响吗?

最佳答案

第一种情况

Select MAX(1) as foo, count(*) as bar From dual

您不需要按表达式分组,因为您有两个聚合函数且没有其他值。

第二种情况

Select (Select Max(1) From dual) as foo, count(*) as bar From dual Group By 1

突然,所选值中的一个不是聚合函数,而是另一种值 - 特别是子查询结果集 - Oracle 无法知道该结果集将包含多少个值。所以你需要在上面有一个分组。

性能影响不会是group by本身造成的,而是子查询造成的。在第一个示例中,您将只有一次 DUAL 扫描,在第二个示例中 - 您将进行两次表扫描 - 一次用于子查询,一次用于主查询。您可以在执行计划中看到这一点。

关于Oracle:使用内部选择进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32246603/

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