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)
Où 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.