SQLite
 sql >> Base de données >  >> RDS >> SQLite

Supprimer les doublons des résultats Count () dans SQLite

Lors de l'utilisation de count() fonction dans SQLite, vous pourriez vous retrouver dans la situation où vous ne voulez compter que des valeurs distinctes. Autrement dit, vous ne voulez pas que les valeurs en double soient comptées plusieurs fois.

En d'autres termes, si la colonne a la même valeur plusieurs fois, elle ne devrait compter cette valeur qu'une seule fois.

Par défaut, count() inclura toutes les valeurs en double dans son calcul. Par exemple, si la valeur "Chat" apparaît 3 fois, count() comptera pour 3.

Cependant, si vous voulez que seules les valeurs distinctes soient comptées, alors count() le compterait comme 1.

Heureusement, il existe un moyen simple de le faire. Tout ce que vous avez à faire est d'ajouter le DISTINCT mot clé à votre count() une fonction. Comme ceci :

count(DISTINCT x)

x est le nom de la colonne dont vous comptez le contenu (ou toute la ligne si vous utilisez le caractère générique astérisque).

Exemple

Prenez le tableau suivant :

ProductId   ProductName    Price     
----------  -------------  ----------
1           Widget Holder  139.5     
2           Blue Widget    10.0      
3           Red Widget     10.0      
4           Green Widget   10.0      
5           Widget Stick   89.75     
6           Foo Cap        11.99     

Notez que les lignes 2 à 4 ont toutes le même prix (10,0).

Si je fais un count() normal sur le Prix colonne, il comptera les six lignes.

SELECT count(Price) FROM Products;

Résultat :

6

Cependant, si j'ajoute le DISTINCT mot-clé, il comptera ces trois lignes comme une seule.

SELECT count(DISTINCT Price) FROM Products;

Résultat :

4

Compter des lignes distinctes

Le count() la fonction accepte le caractère générique astérisque (* ), ce qui signifie qu'il comptera toutes les lignes.

Cependant, vous obtiendrez probablement une erreur si vous essayez d'utiliser DISTINCT lors de l'utilisation du caractère générique astérisque.

Voici un tableau avec des lignes en double.

Postal      State             
----------  ------------------
NSW         New South Wales   
NSW         New South Wales   
QLD         Queensland        
TAS         Tasmania          
SA          South Australia   
WA          Western Australia 
VIC         Victoria          

En théorie, je devrais pouvoir utiliser DISTINCT pour compter les lignes "dédoublées" dans ce tableau. Cependant, cela ne semble pas possible.

SELECT count(DISTINCT *)
FROM States;

Résultat :

Error: near "*": syntax error

Au lieu de cela, je dois spécifier un nom de colonne lors de l'utilisation du DISTINCT mot-clé.

SELECT 
  count(State),
  count(DISTINCT State)
FROM States;

Résultat :

count(State)  count(DISTINCT State)
------------  ---------------------
7             6                    

Une autre façon de le faire serait de faire quelque chose comme ceci :

SELECT count(*) FROM (SELECT DISTINCT * FROM States);

Résultat :

6

Cela ne devrait pas vraiment être un problème, car ce n'est généralement pas une bonne conception de base de données d'autoriser des lignes en double comme celle-ci.