jueves, 14 de marzo de 2013

La Diferencia Entre Select Count(*) y Select Count(Nombre-de-Columna)

Hallé este ejemplo, escrito por Tanel Poder, aquí y decidí traducirlo para los hispanohablantes. Lo probé en Oracle 11.2.0.1.0. Hay una diferencia entre select count(*) o select count(constante) y select count(nombre-de-columna): 

SQL> select count(*) from v$session
  2  /

  COUNT(*)
----------
       513

SQL> select count(123) from v$session
  2  /

COUNT(123)
----------
       513

SQL> select count(username) from v$session
  2  /

COUNT(USERNAME)
---------------
            487

SQL> 

Select count(*) y select count(constante) cuentan todas las líneas que ven pero select count(nombre-de-columna) cuenta sólo las líneas donde columna no sea null. Si cambiamos el select count(*) o el select count(123) para contar sólo las líneas donde username no sea null, el resultado que vemos es igual al resultado del select count(username): 

SQL> select count(*) from v$session
  2  where username is not null
  3  /

 COUNT(*)
----------
       487

SQL> select count(123) from v$session
  2  where username is not null
  3  /

COUNT(123)
----------
       487

SQL>

Y si cambiamos el select count(username) para incluir las líneas donde username sea null, el resultado que vemos es igual a los resultados del select count(*) o del select count(123): 

SQL> select count(nvl(username,'blah'))
  2  from v$session
  3  /

COUNT(NVL(USERNAME,'BLAH'))
---------------------------
                        513

SQL>

No hay comentarios:

Publicar un comentario