Buscar este blog

miércoles, 24 de marzo de 2010

Variantes del SELECT COUNT con DISTINCT

Seguramente, muchos de vosotros habréis usado en innumerables ocasiones la función de T-SQL COUNT, que no hace sino devolver un número de registros: de una tabla, de un conjunto de resultados, etc...

En una de sus aplicaciones, combinado con el DISTINCT -uno de los dos argumentos que admite- COUNT nos devuelve el número de valores únicos no nulos de la tabla o conjunto de resultados que estemos consultando.

Pero ¡ojo! Cuidado con la sintaxis, o podemos obtener el valor equivocado sin darnos cuenta. No es lo mismo:

SELECT COUNT (DISTINCT NombreCampo) FROM NombreTabla

que:

SELECT COUNT(*), DISTINCT NombreCampo FROM NombreTabla


Mientras la primera de las dos nos devolverá justo lo que ya habíamos definido (cuenta de valores únicos no nulos) en único resultado, la segunda nos devolverá el número de registros que tienen cada uno de los valores únicos que tiene la tabla.

Confundir estas dos expresiones es especialmente peligroso si la tabla sólo tiene un valor en el campo que estamos consultando, ya que el número de valores devueltos será el mismo en los dos casos: 1; aunque con dos columnas en el segundo de ellos.

Es decir, ante una tabla Clientes como esta:

CodigoNombre
1Juan
2Pedro
3Juan

La consulta SELECT COUNT (DISTINCT Nombre) FROM Clientes, nos devolverá 2.
La consulta SELECT COUNT (*), DISTINCT Nombre FROM Clientes, nos devolverá:

2 Juan
1 Pedro

Un resultado equivalente se podría obtener con:

SELECT COUNT(*), Nombre FROM Clientes GROUP BY Nombre.

Pero, si la tabla es como sigue:

CodigoNombre
1Juan
2Juan
3Juan


La consulta SELECT COUNT (DISTINCT Nombre) FROM Clientes, nos devolverá 1.
La consulta SELECT COUNT (*), DISTINCT Nombre FROM Clientes, nos devolverá:

3 Juan.

Así pues, habrá que prestar especial atención a cómo escribimos la consulta, teniendo claro cuál es el resultado que queremos obtener. Si queremos saber cuántos nombres distintos hay en nuestra tabla clientes, el resultado que debemos esperar es el 1 que nos devuelve la primera de ellas, y no ese 3 de la segunda, que nos indica cuántos Juan hay entre nuestros clientes.

2 comentarios:

  1. Excelente aporte, muchas gracias, estaba buscando este tema en todas partes y por fin lo encontré aquí, muchas gracias, saludos y muchos éxitos.

    ResponderEliminar