SQL pour trouver le nombre de valeurs distinctes dans une colonne


342

Je peux sélectionner toutes les valeurs distinctes dans une colonne des manières suivantes:

  • 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?


1
Quelle version de SQL Server utilisez-vous?
Kevin Fairchild

Réponses:


614

Vous pouvez utiliser le DISTINCTmot clé dans la COUNTfonction d'agrégation:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Cela ne comptera que les valeurs distinctes pour cette colonne.


7
Bien, je ne savais pas que vous pouviez y mettre le mot-clé distinct.
Christian Oudard

13
travaille également sur des groupesselect A,COUNT(DISTINCT B) from table group by A
tmanthey

6
pouvez-vous développer cet exemple pour le distinguer sur plusieurs colonnes?
eugene

11 ans plus tard, et cela est toujours utile
wundermahn

176

Cela vous donnera les deux valeurs de colonne distinctes et le nombre de chaque valeur. Je trouve généralement que je veux connaître les deux informations.

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

60
Puisque vous effectuez un regroupement columnName, vous obtenez déjà les valeurs distinctes une seule fois et le distinctmot clé ne fait rien ici. Essayez la requête sans elle, le jeu de résultats est exactement le même.
Antti29

26

Sachez que Count () ignore les valeurs nulles, donc si vous devez autoriser null comme sa propre valeur distincte, vous pouvez faire quelque chose de délicat comme:

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

Je pense vraiment que votre déclaration de cas était censée dire:case when my_col is null then 1 else my_col end
James Jensen

Pour plus de clarté: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 (*) comprend les nulls
PragmaticProgrammer

1
@PragmaticProgrammer Je suppose que oui, mais il n'y a rien de tel qu'une ligne nulle, seulement une valeur nulle, et count(*)c'est spécifiquement un nombre de lignes.
David Aldridge

20

Une somme sql des valeurs uniques de nom_colonne et triée par la fréquence:

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

1
Certainement la meilleure réponse OMI
Briford Wylie

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

Cela donnera le nombre de groupes distincts de colonnes.


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

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


5
select Count(distinct columnName) as columnNameCount from tableName 

0

**

En utilisant le SQL suivant, nous pouvons obtenir le nombre de valeurs de colonne distinct dans Oracle 11g.

**

Select count(distinct(Column_Name)) from TableName

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

Vous pouvez utiliser cette requête pour compter des données différentes / distinctes. Merci


0

Après MS SQL Server 2012, vous pouvez également utiliser la fonction de fenêtre.

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

-8

Le compte (distinct ({fieldname})) est redondant

Simply Count ({fieldname}) vous donne toutes les valeurs distinctes de cette table. Il ne vous donnera pas (comme beaucoup le supposent) le compte de la table [c.-à-d. PAS le même que le compte (*) de la table]


2
Non, ce n'est pas correct. count(field)renvoie le nombre de lignes où fieldest not null.
Antti29
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.