2008-09-26 20 views
255

puedo seleccionar todos los valores distintos en una columna de la siguiente manera:SQL para encontrar el número de valores distintos en una columna

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

pero ¿cómo puedo obtener el recuento de filas de esa consulta? ¿Se requiere una subconsulta?

+0

¿Qué versión de SQL Server está utilizando? –

Respuesta

462

Usted puede utilizar la palabra clave DISTINCT dentro de la función de agregado COUNT:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 

Esto cuenta sólo los valores distintos para esa columna.

+2

Limpio, no sabía que podría poner la palabra clave distinta allí. –

+10

también funciona en grupos 'seleccionar A, CUENTA (DISTINCIÓN B) del grupo de tablas por A' – tmanthey

+2

¿puede expandir este ejemplo a distinct en varias columnas? – eugene

6
select Count(distinct columnName) as columnNameCount from tableName 
9
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count; 

tienes que contar esa col distinta, y luego darle un alias.

22

Tenga en cuenta que Count() ignora los valores nulos, por lo que si usted necesita para tener en cuenta nulo como su propio valor distinto se 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 
/
+0

Realmente creo que su declaración de caso estaba destinada a decir: 'caso cuando my_col es nulo, entonces 1 else my_col end' –

+0

Para mayor claridad:' '' SELECT my_col, COUNT (my_col) + COUNT (CASO CUANDO my_col IS NULL THEN 1 ELSE NULL END) como CountOf de my_Table GROUP BY my_col''' –

+0

count (*) incluye nulos – PragmaticProgrammer

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

Esto dará cuenta de distinta grupo de columnas

126

Esto le dará TANTO los valores de columna distintos como el recuento de cada valor. Normalmente encuentro que quiero saber ambas piezas de información.

select distinct columnName, count(columnName) as CountOf from tableName group by columnName 
+42

Dado que está agrupando por 'columnName', ya obtiene los valores distintos una sola vez y la palabra clave' distinct' no hace nada aquí. Pruebe la consulta sin él, el resultado es exactamente el mismo. – Antti29

-5

Count (distinta (nombre de campo {})) es redundante

Simplemente Count (nombre de campo {}) le ofrece todos los valores distintos de esa tabla. No (como muchos presumen) simplemente le dará el Conteo de la tabla [es decir No es lo mismo Count (*) de la tabla]

+2

No, esto es * no * correcto. 'count (field)' devuelve el número de líneas donde 'field' es' not null'. – Antti29

8

una suma sql de 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; 
Cuestiones relacionadas