¿Cómo puedo contar solo los valores NULL en Oracle/PLSQL?¿Cómo puedo contar solo valores NULL en Oracle/PLSQL?
Quiero contar solo los valores nulos. ¿Hay una función que hace eso?
¿Cómo puedo contar solo los valores NULL en Oracle/PLSQL?¿Cómo puedo contar solo valores NULL en Oracle/PLSQL?
Quiero contar solo los valores nulos. ¿Hay una función que hace eso?
No sé Oracle de manera específica, pero ANSI SQL, COUNT(rowName)
no cuenta NULL
valores, pero COUNT(*)
lo hace. Para que pueda escribir
SELECT COUNT(*) FROM YourTable WHERE YourColumn IS NULL
que cuenta las filas en YourTable que tienen YourColumn puesto a NULL.
El Oracle documentation establece que:
Todas las funciones agregadas, a menos COUNT (*) y la agrupación ignoran los valores nulos. Puede usar la función NVL en el argumento para agregar una función a para anular un valor.
Como ejemplo, utilizando el esquema scott:
SQL> select empno, sal, comm
2 from emp;
EMPNO SAL COMM
---------- ---------- ----------
7369 800
7499 1600 300
7521 1250 500
7566 2975
7654 1250 1400
7698 2850
7782 2450
7788 3000
7839 5000
7844 1500 0
7876 1100
7900 950
7902 3000
7934 1300
14 rows selected.
Se puede ver que la columna de la Comm ha 4 valores (es decir, no nula) y 10 valores desconocidos (es decir NULL)
conocida Como count(your_column_name)
ignora los nulos, debe sustituir los valores desconocidos por algo que pueda consultar. Esto se puede lograr utilizando la función NVL.
SQL> select count(nvl(comm, -1)) "number of null values"
2 from emp
3 where nvl(comm, -1) = -1;
number of null values
---------------------
10
He utilizado el valor "-1" como el "alias" para mis valores nulos porque saben que "-1" no es un valor existente dentro de la columna de comunicaciones.
EDIT:
Siguiendo la sugerencia de Rob. Es posible eliminar la cláusula WHERE en el ejemplo anterior y utilizar la función NVL2 como se muestra a continuación:
SQL> select count(nvl2(comm,null,-1)) "number of null values"
2 from emp
3/
number of null values
---------------------
10
o simplemente, sin una cláusula where: select count (nvl2 (comm, null, 1)) from emp –
Gracias Rob - No lo sabía. Se agregará a mi respuesta. Gracias de nuevo –
Como una alternativa a la respuesta de la MDMA. Si no quiere poner un filtro en el donde se puede
SELECT COUNT(case when xxx IS NULL THEN 1 end) cnt_xxx_null
FROM table
Si quiere contar también con otros valores nula entonces el uso de la función COALESCE voluntad mejora el tiempo de ejecución
Oracle Differences between NVL and Coalesce
SELECT COUNT(COALESCE(_COLUMN, 1)) AS CNT FROM _TABLE
Y si la columna que está contando, reemplace el '1' por '' 1 '' o 'ábc' o algo así. Por cierto, también lo cambiamos para unirnos a algo que no puede suceder en la realidad de la base de datos. De todas formas. Entonces para una tabla que tiene caracteres: SELECCIONAR COUNT (COALESCE (_COLUMN, 'abc')) COMO CNT DESDE _TABLE – cybork
podría tratar de invertir la nula, ver resultados
SELECT
COUNT(DECODE(YourField, null, 1, null)) Nulls,
count(*) Everything,
COUNT(YourField) NotNulls
FROM YourTable
Todo debe ser igual a los nulos + notnulls
select count(nvl(values, 0)) from emp where values is null;
¿Por qué el 'count (nvl (values, 0))'? haciendo un 'conteo de selección (1) de ...' haría lo mismo. –
funcionó !! .... GRACIAS :-) –
En mi base de datos de Oracle no funciona.Una cuenta da como resultado 0, porque null no se puede contar. Usamos un coalesce para resolver eso. – cybork