¿Qué debo hacer si SQL encuentra un divisor de 0 durante el procesamiento de datos?

Columna SQL

Resumen de conocimientos básicos de la base de datos SQL

Resumen del conocimiento avanzado de la base de datos SQL

problema

Cuando hacemos estadísticas de datos, a menudo nos encontramos con situaciones en las que necesitamos dividir por un cierto número, como buscar porcentajes, relaciones en cadena, año tras año, etc. Si el divisor es 0, la base de datos informará un error .

Entonces, ¿cómo lidiamos con tal situación? Usemos un ejemplo para explicar cómo lidiar con eso.

Solución

Situación uno

P.ej


SELECT  A/B  FROM TAB

En tal situación, el enfoque general es utilizar CASE WHEN para determinar el valor de B

SELECT 
CASE WHEN B=0 THEN 0 ELSE A/B END  
FROM TAB

De esta manera, si B es 0, asignamos directamente un valor para evitar que A / B participe en el cálculo y reporte errores.

Situación dos

Lo anterior es una situación común, pero ¿qué sucede si encuentra la siguiente función agregada?

P.ej


SELECT  SUM(A)/COUNT(B) FROM TAB

En tal situación, CASE WHEN no puede juzgar el valor de COUNT (B), porque las condiciones detrás de WHEN no pueden usar funciones agregadas (requisitos de sintaxis). En este momento, podemos tratarlo así


SELECT  
ISNULL(SUM(A)/NULLIF(COUNT(B),0),0)  
FROM  TAB

Aquí se utilizan dos funciones, NULLIF () e ISNULL ()

La función NULLIF tiene dos parámetros, que se definen de la siguiente manera:

NULLIF (expresión1, expresión2)

Su función es: si las dos expresiones especificadas son iguales, devuelve un valor NULO.

La función ISNULL también tiene dos parámetros, que se definen de la siguiente manera:

ISNULL (expresión1, expresión2)

Su función es: si el resultado del primer parámetro es NULL, se devuelve el valor del segundo parámetro.

Cuando el resultado de COUNT (B) es 0, es exactamente igual al segundo parámetro dado 0. En este momento, la función NULLIF devolverá NULL, y el resultado de SUM (A) cuando se divide por NULL es NULL, y el la capa externa usa ISNULL La función juzga el valor NULL, por lo que el resultado final es 0.

Estos dos métodos son nuestro manejo diario de la situación en la que el divisor es 0, por lo que debemos recordar ~

Supongo que te gusta

Origin blog.51cto.com/15057820/2655152
Recomendado
Clasificación