gpt4 book ai didi

sql - 使用 HAVING 与子查询有什么区别

转载 作者:行者123 更新时间:2023-12-02 09:13:15 28 4
gpt4 key购买 nike

我是 SQL 的新手,正在通过 datacamp 进行学习。我想知道您是否可以使用“HAVING”获得与嵌套“WHERE”子句相同的结果。

相关:SQL - having VS where我知道 HAVING 与聚合函数一起使用,例如 min、max、..

我如何用 HAVING 重写以下内容?

SELECT *
FROM populations
WHERE year = 2015 AND life_expectancy >(
SELECT AVG(life_expectancy)*1.15
FROM populations
);

假设我在“人口”表中有 6 列:A(字符)、B(字符)、C(字符)、D(数字,即示例中的预期生命周期)、年份和 E(数字)。

我尝试了以下方法:

SELECT *
FROM populations
WHERE year = 2015
GROUP BY A, B, C, year
HAVING life_expectancy > AVG(life_expectancy)*1.15;

但是,这会返回一个空表。我意识到这不是一个可重现的例子,但也许对它为什么不起作用的一般解释就足够了:)

最佳答案

HAVING 通常用于限制 GROUP BY 子句的结果,就像 WHERE 用于限制SELECT 子句的结果。

此外,虽然 WHERE 子句不能直接包含聚合,但您可以使用 HAVING 子句(带有聚合),或者您可以使用子查询在包含聚合的 WHERE 子句中。

除非您对数据进行分组或以其他方式聚合数据,否则我不明白您为什么要将 WHERE 子句重写为 HAVING 子句。

在您的示例中,您正在创建一组基于 A、B、C 和年份的组。然后,您将这些群体限制为该群体的预期生命周期(无论这意味着什么?)大于同一群体的平均预期生命周期乘以 1.15 的那些群体。它没有任何意义,这是你已经建立的。

关于sql - 使用 HAVING 与子查询有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49768987/

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