Sql 有可能在HAVING子句之后有一个WHERE子句?
可以在HAVING子句之后使用WHERE子句吗 我首先想到的是子查询,但我不确定Sql 有可能在HAVING子句之后有一个WHERE子句?,sql,where,having,Sql,Where,Having,可以在HAVING子句之后使用WHERE子句吗 我首先想到的是子查询,但我不确定 如果答案是肯定的,你能举一些例子吗?HAVING子句就是groupby后面的WHERE子句。为什么不将WHERE条件放在HAVING子句中?从选择帮助 其中的处理顺序,分组方式, 并具有以下步骤 显示选定对象的处理顺序 带有WHERE子句、组的语句 根据条款和拥有条款: FROM子句返回一个首字母 结果集 WHERE子句不包括行not 满足其搜索条件 GROUPBY子句收集 将选定行分成一组,每组一行 GROUP
如果答案是肯定的,你能举一些例子吗?HAVING子句就是groupby后面的WHERE子句。为什么不将WHERE条件放在HAVING子句中?从选择帮助 其中的处理顺序,分组方式, 并具有以下步骤 显示选定对象的处理顺序 带有WHERE子句、组的语句 根据条款和拥有条款: FROM子句返回一个首字母 结果集 WHERE子句不包括行not 满足其搜索条件 GROUPBY子句收集 将选定行分成一组,每组一行 GROUP BY子句中的唯一值 中指定的聚合函数 选择列表计算汇总值 每一组 附加条款 排除不符合其搜索条件的行 条件
所以,不,你不能。如果这是一个技巧性的问题,如果WHERE和have不在同一级别,就像你提到的,子查询是可能的 我想那样做会管用的 HAVING value=从中选择maxvalue foo其中crit=123 p、 s:你为什么问? 你有什么特别的问题吗
p、 s.s:好吧,傻我,我错过了面试*标签…不,不是在同一个问题中 where子句位于having和group by之前。如果要在分组之前过滤掉记录,条件将出现在where子句中,如果要过滤掉分组记录,条件将出现在having子句中: 如果出于某种奇怪的原因,这两种方法都无法使用,则必须将查询设为子查询,以便将where子句放入外部查询:
select ...
from (
select ...
from ...
where ...
group by ...
having ...
) x
where ...
在同一范围内,答案是否定的。如果允许子查询,那么您可以避免使用have 我认为拥有是一个时代错误。Hugh Darwen提到结构化查询的愚蠢之处: 在旧SQL中,WHERE子句不能 用于聚合结果,因此 他们不得不发明用同样的方法来做 含义如下: 但是如果我们有 1979年,人们可以这样写:
SELECT *
FROM (
SELECT D#, AVG(Sal) AS Avg_Sal
FROM Emp
GROUP
BY D#
)
AS dummy
WHERE Avg_Sal > 999;
我强烈怀疑Darwen问题的答案是否定的。这是一个技巧/面试问题,还是你有真正的问题要解决?是的。问题来自访谈。从概念上讲,HAVING子句是在GROUP BY operation之后应用的,而WHERE子句是在GROUP BY operation之前应用的,因此理论上可以通过WHERE子句中的“过滤”进行优化。在实践中,您将始终必须查看优化器如何处理它,例如检查执行计划。也可以考虑人类读者,他们通常期望看到“WHERE”在WHERE子句中谓语而不是连接子句,具有子句等。
SELECT D#, AVG(Salary) AS Avg_Sal
FROM Emp
GROUP
BY D#
HAVING AVG(Salary) > 999;
SELECT *
FROM (
SELECT D#, AVG(Sal) AS Avg_Sal
FROM Emp
GROUP
BY D#
)
AS dummy
WHERE Avg_Sal > 999;