Compartir a través de


Trabajar con columnas en consultas agregadas (Visual Database Tools)

se aplica a:sql Server

Al crear consultas de agregado, las herramientas del Diseñador de consultas y vistas (Visual Database Tools) hacen ciertas suposiciones para que pueda construir una consulta válida. Por ejemplo, si va a crear una consulta de agregado y marcar una columna de datos para la salida, el Diseñador de consultas y vistas convierte automáticamente la parte de columna de la GROUP BY cláusula para que no intente mostrar accidentalmente el contenido de una fila individual en un resumen.

Uso de Group By

El Diseñador de consultas y vistas usa las siguientes directrices para trabajar con columnas:

  • Al elegir la opción Agrupar por o agregar una función de agregado a una consulta, todas las columnas marcadas para la salida o usadas para la ordenación se agregan automáticamente a la GROUP BY cláusula . Las columnas no se agregan automáticamente a la GROUP BY cláusula si ya forman parte de una función de agregado.

    Si no desea que una columna determinada forme parte de la GROUP BY cláusula , debe cambiarla manualmente seleccionando una opción diferente en la columna Agrupar por del panel Criterios. Sin embargo, el Diseñador de consultas y vistas no impide elegir una opción que pueda dar lugar a una consulta que no se ejecute.

  • Si agrega manualmente una columna de salida de consulta a una función de agregado en el panel Criterios o SQL, el Diseñador de consultas y vistas no quita automáticamente otras columnas de salida de la consulta. Por lo tanto, debe quitar las columnas restantes de la salida de la consulta o convertirlas en parte de la GROUP BY cláusula o de una función de agregado.

Al escribir una condición de búsqueda en la columna Filtro del panel Criterios, el Diseñador de consultas y vistas sigue estas reglas:

  • Si no se muestra la columna Group By de la cuadrícula (porque aún no ha especificado una consulta de agregado), la condición de búsqueda se coloca en la WHERE cláusula .

  • Si ya está en una consulta de agregado y ha seleccionado la opción Where in the Group By columna, la condición de búsqueda se coloca en la WHERE cláusula .

  • Si la columna Group By contiene cualquier valor distinto de Where, la condición de búsqueda se coloca en la HAVING cláusula .

Uso de las cláusulas HAVING y WHERE

Los principios siguientes describen cómo puede hacer referencia a columnas en una consulta de agregado en condiciones de búsqueda. En general, puede usar una columna en una condición de búsqueda para filtrar las filas que se deben resumir (una WHERE cláusula) o para determinar qué resultados agrupados aparecen en la salida final (una HAVING cláusula).

  • Las columnas de datos individuales pueden aparecer en la WHERE cláusula o HAVING , en función de cómo se usen en otra parte de la consulta.

  • WHERE Las cláusulas se usan para seleccionar un subconjunto de filas para resumir y agrupar y, por tanto, se aplican antes de que se realice cualquier agrupación. Por lo tanto, puede usar una columna de datos en una WHERE cláusula incluso si no forma parte de la GROUP BY cláusula o está contenida en una función de agregado. Por ejemplo, la siguiente instrucción selecciona todos los títulos que cuestan más de 10,00 USD y calcula el precio promedio de estos.

    SELECT AVG(price)
    FROM titles
    WHERE price > 10;
    
  • Si crea una condición de búsqueda que implica una columna que también se usa en una GROUP BY cláusula o una función de agregado, la condición de búsqueda puede aparecer como una WHERE cláusula o una HAVING cláusula ; puede decidir qué al crear la condición. Por ejemplo, la siguiente instrucción crea un precio medio para los títulos de cada publicador y, a continuación, muestra el promedio de los publicadores en los que el precio medio es mayor que 10,00 USD:

    SELECT pub_id,
           AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10);
    
  • Si usa una función de agregado en una condición de búsqueda, la condición implica un resumen y, por tanto, debe formar parte de la HAVING cláusula .