440 votes

SQL pour trouver le nombre de valeurs distinctes dans une colonne

Je peux sélectionner toutes les valeurs distinctes d'une colonne de la manière suivante :

  • 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 à partir de cette requête ? Une sous-requête est-elle nécessaire ?

742voto

Noah Goodrich Points 12645

Vous pouvez utiliser le DISTINCT au sein de la COUNT fonction d'agrégation :

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Cela ne comptera que les valeurs distinctes pour cette colonne.

9 votes

Neat, je ne savais pas que vous pouviez mettre le mot clé distinct ici.

24 votes

Fonctionne également sur les groupes select A,COUNT(DISTINCT B) from table group by A

9 votes

Pouvez-vous étendre cet exemple à la distinction sur plusieurs colonnes ?

241voto

Paul James Points 329

Vous obtiendrez ainsi les DEUX valeurs distinctes de la colonne et le nombre de chaque valeur. J'ai l'habitude de vouloir connaître ces deux informations.

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

38voto

xchiltonx Points 181

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

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

31voto

David Aldridge Points 27624

Sachez que Count() ignore les valeurs nulles, donc si vous avez besoin de prendre en compte les valeurs nulles en tant que valeur distincte, vous pouvez faire quelque chose d'astucieux :

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

0 votes

Je pense vraiment que ta déclaration de cas était destinée à dire : case when my_col is null then 1 else my_col end

0 votes

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

0 votes

Count(*) inclut les nuls

15voto

Pete Karl II Points 1264
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

il faut compter ce col distinct, puis lui donner un alias.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X