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.