题
是否有可能HAVING子句后使用WHERE子句?
这是我想到的第一件事是子查询,但我不知道。
P.S。如果答案是肯定的,你可以举一些例子?
解决方案
没有,而不是在相同的查询。
在where
子句having
和group by
之前进入。如果您想筛选出的记录分组的条件where
子句中去之前,如果你想筛选出分组记录的条件而来的having
子句中:
select ...
from ...
where ...
group by ...
having ...
如果这两个时间都不可以使用一些奇怪的原因,你必须作出查询子查询,这样就可以把where
子句中的外部查询:
select ...
from (
select ...
from ...
where ...
group by ...
having ...
) x
where ...
其他提示
一个HAVING子句只是一个GROUP BY后WHERE子句。为什么不把你的WHERE条件在HAVING子句中?
如果这是一个有趣的问题,这是可能的,如果WHERE和在HAVING并不在同一水平,因为你mentionned,与子查询。
我想类似的东西,将工作
HAVING值=(SELECT MAX(值)FROM foo其中爆击= 123)
P.S:你为什么要问? 你有一个具体的问题?
p.s.s:OK我傻,我错过了 “采访*” 标记...
从SELECT帮助
处理WHERE,GROUP BY的订单, 和HAVING子句下面的步骤 示出了用于一个SELECT处理顺序 用WHERE子句,GROUP语句 BY子句和HAVING子句:
在FROM子句返回初始 结果集。
WHERE子句排除行不 满足其搜索条件。
GROUP BY子句收集 选定的行成一组用于每个 在GROUP唯一值BY子句。
在指定的集合函数 选择列表计算汇总值 为每个组。
HAVING子句另外 排除不符合其搜索行 条件。
所以,没有你做不到。
在相同的范围,答案是否定的。如果子查询被允许则可以避免使用完全HAVING
我认为HAVING
是不合时宜。休·达文指HAVING
为“结构化查询的愚蠢”:
在旧SQL中,
WHERE
子句不能 对聚集的结果被使用,所以 他们不得不发明HAVING
(与相同 含义WHERE
):SELECT D#, AVG(Salary) AS Avg_Sal FROM Emp GROUP BY D# HAVING AVG(Salary) > 999;
不过,如果我们曾经有过
HAVING
如果 在1979年一个可以写:SELECT * FROM ( SELECT D#, AVG(Sal) AS Avg_Sal FROM Emp GROUP BY D# ) AS dummy WHERE Avg_Sal > 999;
我强烈怀疑的答案,达尔文的问题是没有。