sql >> Base de Datos >  >> RDS >> Database

Cómo filtrar registros con la función de agregado AVG

Problema:

Desea encontrar grupos de filas en los que el promedio de valores en una columna sea mayor o menor que un valor dado.

Ejemplo:

Nuestra base de datos tiene una tabla llamada product con datos en las siguientes columnas:id , name , grocery y price .

id nombre comestibles precio
1 leche Tienda Verde 2.34
2 pan Supermercado de Clark 3.56
3 pan Supermercado 4.15
4 leche Supermercado 1,80
5 pan Supermercado Amanda 2.26
6 leche Supermercado Violeta 3,45
7 leche Supermercado de Clark 2.10
8 pan Supermercado Violeta 2,55
9 leche Supermercado Amanda 1,95

Busquemos los nombres de los productos en los que el precio medio de cada producto entre las tiendas de comestibles es superior a 3,00.

Solución:

SELECT name, AVG(price)
FROM product
GROUP BY name
HAVING AVG(price)>3.00;

Aquí está el resultado:

nombre promedio
pan 3.13

Discusión:

Para filtrar registros mediante la función de agregado, utilice la cláusula HAVING.

Aquí calculamos el valor agregado:el precio medio de cada producto. Uno es vendido por más de un tendero; por lo tanto, el precio promedio se calcula para cada uno (en nuestro ejemplo, SELECT name, AVG(price) ). Además de la función agregada, también usamos el nombre de la columna en SELECT, por lo que deberíamos usar GROUP BY con este nombre de columna (GROUP BY name ).

El último paso es usar la función agregada en la cláusula HAVING. Recuerde que HAVING debe colocarse después de la cláusula GROUP BY. Contiene la condición que compara el valor devuelto por la función agregada con un valor dado. Arriba, es el precio medio del producto con un valor de 3,00 (HAVING AVG(price)>3.00 ). En esta consulta, comprobamos si el precio medio de cada producto en todos los supermercados es superior a tres. La consulta mostró solo un producto, pan, con un precio promedio superior a tres.