Pregunta

Es posible el uso de una cláusula WHERE después de una cláusula HAVING?

La primera cosa que viene a la mente es sub consultas, pero no estoy seguro.

P.S. Si la respuesta es afirmativa, ¿podría dar algunos ejemplos?

¿Fue útil?

Solución

No, no en la misma consulta.

La cláusula where va delante de la having y la group by. Si desea filtrar los registros antes de la agrupación de la condición va en la cláusula where, y si se desea filtrar registros agrupados la condición va en la cláusula having:

select ...
from ...
where ...
group by ...
having ...

Si ninguno de los que son posibles de usar por alguna extraña razón, usted tiene que hacer la consulta una subconsulta para que pueda poner la cláusula where en la consulta externa:

select ...
from (
   select ...
   from ...
   where ...
   group by ...
   having ...
) x
where ...

Otros consejos

Una cláusula HAVING es sólo una cláusula donde después de un GROUP BY. ¿Por qué no poner las condiciones en las que en la cláusula HAVING?

Si es una pregunta con trampa, es posible si el WHERE y el que tiene no están al mismo nivel, como lo mencionado, la subconsulta.

supongo que algo así iba a funcionar

  

valor HAVING = (SELECT max (valor) a partir de   foo DONDE crit = 123)

p.s .: ¿por qué estabas preguntando? ¿Tiene un problema específico?

p.s.s: OK tonto de mí, echaba de menos la "entrevista *" etiqueta ...

Desde ayudar a seleccionar

  

orden de procesamiento de WHERE, GROUP BY,   y HAVING cláusulas Los siguientes pasos   mostrar el orden de procesamiento para un SELECT   declaración con una cláusula WHERE, un grupo   POR cláusula, y una cláusula HAVING:

     

La cláusula FROM devuelve un inicial   conjunto de resultados.

     

La cláusula WHERE excluye filas no   el cumplimiento de su condición de búsqueda.

     

La cláusula GROUP BY recoge el   seleccionado filas en un grupo para cada   valor único en la cláusula GROUP BY.

     

Las funciones de agregación especificadas en el   Calcular los valores de resumen lista de selección   para cada grupo.

     

La cláusula HAVING adicionalmente   excluye filas que no cumplen con su búsqueda   condición.

Así que, no, no puedes.

Dentro del mismo ámbito, respuesta es no. Si se permite que las subconsultas entonces se puede evitar el uso de HAVING por completo.

Creo HAVING es un anacronismo. Hugh Darwen refiere a HAVING como "La locura de consultas estructuradas":

  

En la antigua SQL, la cláusula no podía WHERE   ser utilizado en resultados de la agregación, por lo   tuvieron que inventar HAVING (con igual   el significado como WHERE):

SELECT D#, AVG(Salary) AS Avg_Sal
  FROM Emp
 GROUP 
    BY D#
HAVING AVG(Salary) > 999;
     

Pero tendríamos que hemos tenido HAVING si   en 1979 se podría escribir:

SELECT * 
  FROM (
        SELECT D#, AVG(Sal) AS Avg_Sal
          FROM Emp
         GROUP 
            BY D# 
       )
      AS dummy
WHERE Avg_Sal > 999;

Sospecho fuertemente la respuesta a la pregunta de Darwen es no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top