2009-08-23 22 views
18

Aquí es mi consulta de selección:¿Cómo puedo hacer que una consulta SUM MySQL devuelva cero en lugar de nulo si no hay registros?

SELECT SUM(rating) AS this_week 
FROM table_name 
WHERE UNIX_TIMESTAMP(created_at) >= UNIX_TIMESTAMP() - 604800) 

Lo que básicamente cuenta la calificación de un elemento para la última semana (604.800 es un número de segundos en 1 semana).

El problema es que cuando no hay filas en la tabla, this_week se devolverá como NULL. Me gustaría que la consulta devuelva 0 en caso de que no haya filas en la tabla. ¿Cómo hacerlo?

Respuesta

41

Esto debe hacer el truco:

SELECT COALESCE(SUM(rating),0) AS this_week FROM table_name 
    WHERE UNIX_TIMESTAMP(created_at) >= UNIX_TIMESTAMP() - 604800) 

COALESCE es una función que devolverá el primer valor no nulo de la lista.

+0

Gracias, esto hizo exactamente lo que necesitaba :) –

9

¿No puedes usar ISNULL(SUM(rating), 0)?

+7

Creo que te refieres a 'IFNULL' para MySQL. –

+0

Esta solución es más adecuada que la respuesta aceptada cuando se utilizan registros activos de CI. Gracias – eNeMetcH

Cuestiones relacionadas