2008-09-26 7 views
255

je peux sélectionner toutes les valeurs distinctes dans une colonne de la manière suivante:SQL pour trouver le nombre de valeurs distinctes dans une colonne

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

Mais comment puis-je obtenir le nombre de lignes de cette requête? Une sous-requête est-elle requise?

+0

Quelle version de SQL Server utilisez-vous? –

Répondre

462

Vous pouvez utiliser le mot-clé DISTINCT dans la fonction globale COUNT:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 

Cela ne comptera que les valeurs distinctes pour cette colonne.

+2

Neat, je ne savais pas que vous pourriez mettre le mot-clé distinct là. –

+10

fonctionne également sur les groupes 'select A, COUNT (DISTINCT B) du groupe de tables par A' – tmanthey

+2

pouvez-vous étendre cet exemple à distinct sur plusieurs colonnes? – eugene

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

vous devez compter ce col distinct, puis lui donner un alias.

22

Sachez que Count() ne tient pas compte des valeurs nulles, donc si vous devez permettre nul comme sa propre valeur distincte, vous pouvez faire quelque chose délicate comme:

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

Je pense vraiment que votre déclaration de cas était censé dire: 'cas où my_col est nul alors 1 autre my_col end' –

+0

Pour plus de clarté:' '' SELECT my_col, COUNT (mon_col) + COUNT (CASE quand my_col EST NULL THEN 1 ELSE NULL END) comme CountOf à partir de my_Table GROUP BY my_col''' –

+0

count (*) inclut les valeurs nulles – PragmaticProgrammer

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

Cela donnera le nombre de distincts groupe de colonnes.

126

Cela vous donnera à la fois les valeurs de colonnes distinctes et le nombre de chaque valeur. Je trouve habituellement que je veux connaître les deux informations.

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

Puisque vous êtes groupé par 'columnName', vous obtenez déjà les valeurs distinctes une seule fois et le mot-clé' distinct' ne fait rien ici. Essayez la requête sans cela, le résultat est exactement le même. – Antti29

-5

Count (distinct ({} nomchamp)) est redondant

simplement Count ({} nomchamp) vous donne toutes les valeurs distinctes dans ce tableau. Il ne sera pas (comme beaucoup le prétendent) juste vous donner le comte de la table [i.e. PAS la même chose que Count (*) de la table]

+2

Non, ce n'est * pas * correct. 'count (field)' renvoie le nombre de lignes où 'field' est' non null'. – Antti29

8

Une somme sql des valeurs uniques de Column_name et triées par la fréquence:

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