gpt4 book ai didi

sql - 有子句与子查询

转载 作者:行者123 更新时间:2023-12-03 22:35:58 26 4
gpt4 key购买 nike

我可以通过两种方式使用聚合函数编写查询:

select team, count(min) as min_count
from table
group by team
having count(min) > 500

或者
select * 
from (
select team, count(min) as min_count
from table
group by team
) as A
where A.min_count > 500

这两种方法是否有任何性能优势,或者它们在功能上是否相同?

最佳答案

这两个版本在功能上是相同的。嗯,第二个在语法上是不正确的,但我认为你的意思是:

select * 
from (
select team, count(min) as count
from table
group by team
) t
where count > 500

(您需要在计算中使用别名,并且几个领先的数据库需要在 FROM 子句中的子查询中使用别名。)

功能等效并不意味着它们必须以相同的方式进行优化。通常有多种方法可以编写功能等效的查询。但是,特定的数据库引擎/优化器可以选择(并且经常选择)不同的优化路径。

在这种情况下,查询是如此简单,以至于很难想到多个优化路径。对于这两个版本,引擎基本上必须聚合查询,然后测试过滤​​器的第二列。我个人看不出这个主题有很多变化。如果合适,任何体面的 SQL 引擎都应该使用索引,无论是在这两种情况下,还是两者都不使用。

因此,这个特定问题的答案是,在任何合理的数据库中,这些都应该导致相同的执行计划(即,在索引的使用、并行性的用户和聚合算法的选择方面)。然而,功能相同并不意味着给定的数据库引擎将产生相同的执行计划。所以,一般的答案是“不”。

关于sql - 有子句与子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943960/

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