2011-03-17 22 views
16

Necesito realizar una media en una columna, pero sé que la mayoría de los valores en esa columna serán cero. De todas las filas posibles, solo dos probablemente tendrán valores positivos. ¿Cómo puedo decirle a mySQL que ignore los ceros y solo promedie los valores reales?Mysql AVG para ignorar cero

Respuesta

68

Suponiendo que es posible que desee no excluye totalmente dichas filas (tal vez tienen valores de otras columnas que desea agregar)

SELECT AVG(NULLIF(field ,0)) 
from table 
+0

Gracias, esta será probablemente la mejor opción porque sí, ¡tengo valores en las otras columnas! – Oranges13

+2

esto funciona muy bien, especialmente cuando tiene más de 1 función de agregado en su consulta – Avishai

6

Probablemente se podría controlar que a través de la cláusula WHERE:

select avg(field) from table where field > 0 
+0

Solo si las filas donde el campo es mayor que cero son las que me preocupan. Desafortunadamente en este caso, hay otras 3 columnas que necesito verificar dónde puede no ser ese el caso. – Oranges13

0
select avg(your_column) 
from your_table 
where your_column != 0 
+0

Eso funciona, excepto que hay otros campos que deseo extraer al mismo tiempo que un gran promedio. – Oranges13

0

Puede convertir ceros en NULL, luego la función AVG() solo funcionará con los valores no NULL.

UPDATE table SET column = NULL WHERE column='0'; 
SELECT AVG(column) FROM table; 
+2

Yeesh. ¿Cambiar los datos existentes para que funcione un 'SELECT'? Creo que voy a vomitar ... –

Cuestiones relacionadas