【发布时间】:2018-09-20 23:30:42
【问题描述】:
我是 SQL 新手,通过数据营学习。我想知道您是否可以使用“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(数字,即示例中的 life_expectancy)、年份和 E(数字)。
我尝试了以下方法:
SELECT *
FROM populations
WHERE year = 2015
GROUP BY A, B, C, year
HAVING life_expectancy > AVG(life_expectancy)*1.15;
但是,这会返回一个空表。我意识到这不是一个可重复的例子,但也许对它为什么不起作用的一般解释就足够了:)
【问题讨论】:
-
坚持你的子查询,没有错。
-
@Anonymous 该查询还有另一个问题:
SELECT * ... GROUP BY A,B,C, year。除非所有其他列在功能上依赖于 A、B、C、年份并且我猜它们不是,否则查询将仅在禁用 ONLY_FULL_GROUP_BY 的 MySQL 上工作。 More
标签: sql subquery where-clause having