SQL比较数据库中的两个聚合函数

SQL比较数据库中的两个聚合函数,sql,aggregate-functions,correlated-subquery,having-clause,Sql,Aggregate Functions,Correlated Subquery,Having Clause,请参阅以下来自的查询: 我们可以用MAXunitprice>2*AVGunitprice来代替吗?问题是我们能比较吗 同一having子句中的两个聚合函数?我看到它们总是嵌套第二个聚合,为什么?当然你可以使用MAXunitprice>2*AVGunitprice。从categoryId组中检索最大值。事实上,您有一个子查询使用与分组中使用的categoryId完全相同的categoryId,您可以毫无疑问地使用AVGunitprice SELECT t1.categoryID, categor

请参阅以下来自的查询:

我们可以用MAXunitprice>2*AVGunitprice来代替吗?问题是我们能比较吗 同一having子句中的两个聚合函数?我看到它们总是嵌套第二个聚合,为什么?

当然你可以使用MAXunitprice>2*AVGunitprice。从categoryId组中检索最大值。事实上,您有一个子查询使用与分组中使用的categoryId完全相同的categoryId,您可以毫无疑问地使用AVGunitprice

SELECT t1.categoryID, categoryName
From products t1 INNER JOIN  categories c ON c.categoryID = t1.categoryID
GROUP BY categoryID
HAVING MAX(unitprice) > 2 * AVG(unitprice)
如果子查询中的WHERE子句将包含categoryId之外的任何其他条件,则不能使用此方法。

当然,可以使用MAXunitprice>2*AVGunitprice。从categoryId组中检索最大值。事实上,您有一个子查询使用与分组中使用的categoryId完全相同的categoryId,您可以毫无疑问地使用AVGunitprice

SELECT t1.categoryID, categoryName
From products t1 INNER JOIN  categories c ON c.categoryID = t1.categoryID
GROUP BY categoryID
HAVING MAX(unitprice) > 2 * AVG(unitprice)

如果子查询中的WHERE子句包含categoryId之外的任何其他条件,则不能使用此方法。

谢谢您的回答谢谢您的回答。。。我想我不喜欢他们的榜样。首先,除了MySQL之外,这可能在任何地方都不起作用,因为categoryName没有包含在聚合或组中,虽然在这里应该是安全的,但通常是危险的。在现实世界中,由于这是不相关的,我可能会选择C.categoryId,C.categoryName从类别C中加入产品组中的SELECT categoryId,每个类别的MAXunitPrice>2*AVGunitPrice P ON P.categoryId=C.categoryId。使用关联来表示您是,可能会带来性能问题。此外,该语句可能会在任何RDBMS中引发语法错误,因为GROUP BY categoryId引用的是一个不明确的实例。。。。我想我不喜欢他们的榜样。首先,除了MySQL之外,这可能在任何地方都不起作用,因为categoryName没有包含在聚合或组中,虽然在这里应该是安全的,但通常是危险的。在现实世界中,由于这是不相关的,我可能会选择C.categoryId,C.categoryName从类别C中加入产品组中的SELECT categoryId,每个类别的MAXunitPrice>2*AVGunitPrice P ON P.categoryId=C.categoryId。使用关联仅仅表示您是,可能会带来性能问题。此外,该语句可能会在任何RDBMS中引发语法错误,因为GROUP BY categoryId引用的是一个不明确的实例。