是否有可能HAVING子句后使用WHERE子句?

这是我想到的第一件事是子查询,但我不知道。

P.S。如果答案是肯定的,你可以举一些例子?

有帮助吗?

解决方案

没有,而不是在相同的查询。

where子句havinggroup 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;

我强烈怀疑的答案,达尔文的问题是没有。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top