Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En algunos casos, es posible que quiera excluir filas individuales de grupos (mediante una cláusula WHERE) antes de aplicar una condición a grupos en su conjunto (mediante una cláusula HAVING).
Una cláusula HAVING es como una cláusula WHERE, pero solo se aplica a grupos en su conjunto (es decir, a las filas del conjunto de resultados que representan grupos), mientras que la cláusula WHERE se aplica a filas individuales. Una consulta puede contener una cláusula WHERE y una cláusula HAVING. En ese caso:
La cláusula WHERE se aplica primero a las filas individuales de las tablas o objetos con valores de tabla en el panel Diagrama. Solo se agrupan las filas que cumplen las condiciones de la cláusula WHERE.
A continuación, la cláusula HAVING se aplica a las filas del conjunto de resultados. Solo los grupos que cumplen las condiciones HAVING aparecen en la salida de la consulta. Puede aplicar una cláusula HAVING solo a las columnas que también aparecen en la cláusula GROUP BY o en una función de agregado.
Por ejemplo, imagine que va a unir las tablas titles
y publishers
para crear una consulta que muestre el precio medio de un libro para un conjunto de editoriales. Quiere ver el precio medio solo de un conjunto específico de editores, quizás solo los editores del estado de California. Y aún así, quiere ver el precio medio solo si es superior a 10 dólares.
Puede establecer la primera condición mediante la inclusión de una cláusula WHERE, que descarta los publicadores que no están en California, antes de calcular los precios promedio. La segunda condición requiere una cláusula HAVING, ya que la condición se basa en los resultados de la agrupación y resumen de los datos. La instrucción SQL resultante podría tener este aspecto:
SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10
Puede crear cláusulas HAVING y WHERE en el panel Criterios. De forma predeterminada, si especifica una condición de búsqueda para una columna, la condición forma parte de la cláusula HAVING. Sin embargo, puede cambiar la condición para que sea una cláusula WHERE.
Puede crear una cláusula WHERE y una cláusula HAVING que impliquen la misma columna. Para ello, debe agregar la columna dos veces al panel Criterios y, a continuación, especificar una instancia como parte de la cláusula HAVING y la otra como parte de la cláusula WHERE.
Para especificar una condición WHERE en una consulta agregada
Especifique los grupos de la consulta. Para obtener más información, consulte Agrupar filas en resultados de consulta (Visual Database Tools).
Si aún no está en el panel Criterios, agregue la columna en la que desea basar la condición WHERE.
Borre la columna de Salida a menos que la columna de datos forme parte de la cláusula GROUP BY o esté incluida en una función de agregación.
En la columna Filtro , especifique la condición WHERE. El Diseñador de consultas y vistas agrega la condición a la cláusula HAVING de la instrucción SQL.
Nota:
La consulta que se muestra en el ejemplo de este procedimiento combina dos tablas,
titles
ypublishers
.En este punto de la consulta, la instrucción SQL contiene una cláusula HAVING:
SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id GROUP BY titles.pub_id HAVING publishers.state = 'CA'
En la columna Agrupar por, seleccione Where en la lista de opciones de grupo y resumen. El Diseñador de consultas y vistas quita la condición de la cláusula HAVING de la instrucción SQL y la agrega a la cláusula WHERE.
La instrucción SQL cambia para incluir una cláusula WHERE en su lugar:
SELECT titles.pub_id, AVG(titles.price) FROM titles INNER JOIN publishers ON titles.pub_id = publishers.pub_id WHERE publishers.state = 'CA' GROUP BY titles.pub_id
Véase también
ordenar y agrupar resultados de consulta (Visual Database Tools)
resumen de los resultados de la consulta (Visual Database Tools)