SQL para encontrar el número de valores distintos en una columna


340

Puedo seleccionar todos los valores distintos en una columna de las siguientes maneras:

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

Pero, ¿cómo obtengo el recuento de filas de esa consulta? ¿Se requiere una subconsulta?


1
¿Qué versión de SQL Server estás usando?
Kevin Fairchild

Respuestas:


613

Puede usar la DISTINCTpalabra clave dentro de la COUNTfunción agregada:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Esto contará solo los valores distintos para esa columna.


77
Genial, no sabía que podía poner la palabra clave distinta allí.
Christian Oudard

13
también funciona en gruposselect A,COUNT(DISTINCT B) from table group by A
tmanthey

66
¿puedes expandir este ejemplo a distinto en varias columnas?
eugene

11 años después, y esto sigue siendo útil
wundermahn

175

Esto le dará AMBOS valores de columna distintos y el recuento de cada valor. Generalmente encuentro que quiero saber ambas piezas de información.

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

6060
Dado que está agrupando por columnName, ya está obteniendo los valores distintos solo una vez y la distinctpalabra clave no hace nada aquí. Pruebe la consulta sin ella, el conjunto de resultados es exactamente el mismo.
Antti29

26

Tenga en cuenta que Count () ignora los valores nulos, por lo que si necesita permitir null como su propio valor distintivo, puede hacer algo complicado como:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/

Realmente creo que su declaración de caso debía decir:case when my_col is null then 1 else my_col end
James Jensen

Para mayor claridad:SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
Michael Paulukonis

count (*) incluye nulos
PragmaticProgrammer

1
@PragmaticProgrammer Supongo que sí, pero no existe una fila nula, solo un valor nulo, y count(*)es específicamente un recuento de filas.
David Aldridge

20

Una suma de sql de los valores únicos de column_name y ordenados por la frecuencia:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;

1
Definitivamente la mejor respuesta OMI
Briford Wylie

13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

Esto dará cuenta del grupo distinto de columnas.


11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

tienes que contar esa columna distinta, luego darle un alias.


5
select Count(distinct columnName) as columnNameCount from tableName 

0

** **

Usando el siguiente SQL podemos obtener el recuento de valores de columna distintos en Oracle 11g.

** **

Select count(distinct(Column_Name)) from TableName

0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

Puede usar esta consulta para contar datos diferentes / distintos. Gracias


0

Después de MS SQL Server 2012, también puede usar la función de ventana.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

El recuento (distinto ({fieldname})) es redundante

Simplemente contar ({fieldname}) le ofrece todos los valores distintos en esa tabla. No (como muchos suponen) solo le dará el Conteo de la tabla [es decir, NO es lo mismo que el Conteo (*) de la tabla]


2
No, esto no es correcto. count(field)devuelve el número de líneas donde fieldestá not null.
Antti29
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.