Bei Verwendung von count()
Funktion in SQLite finden Sie sich möglicherweise in einer Situation wieder, in der Sie nur eindeutige Werte zählen möchten. Das heißt, Sie möchten nicht, dass doppelte Werte mehrmals gezählt werden.
Mit anderen Worten, wenn die Spalte mehrmals denselben Wert hat, sollte sie diesen Wert nur einmal zählen.
Standardmäßig count()
schließt alle doppelten Werte in seine Berechnung ein. Wenn beispielsweise der Wert „Katze“ dreimal vorkommt, count()
zählt das als 3.
Wenn Sie jedoch möchten, dass nur eindeutige Werte gezählt werden, dann count()
würde es als 1 zählen.
Glücklicherweise gibt es eine einfache Möglichkeit, dies zu tun. Sie müssen lediglich den DISTINCT
hinzufügen Stichwort zu Ihrem count()
Funktion. So:
count(DISTINCT x)
Wobei x
ist der Spaltenname, dessen Inhalt Sie zählen (oder die ganze Zeile, wenn Sie den Sternchen-Platzhalter verwenden).
Beispiel
Nehmen Sie die folgende Tabelle:
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
Beachten Sie, dass die Zeilen 2 bis 4 alle denselben Preis haben (10,0).
Wenn ich ein normales count()
mache auf den Preis Spalte, werden alle sechs Zeilen gezählt.
SELECT count(Price) FROM Products;
Ergebnis:
6
Wenn ich jedoch den DISTINCT
hinzufüge Schlüsselwort, werden diese drei Zeilen als eine gezählt.
SELECT count(DISTINCT Price) FROM Products;
Ergebnis:
4
Unterscheidbare Zeilen zählen
Der count()
Die Funktion akzeptiert das Sternchen als Platzhalter (*
), was bedeutet, dass alle Zeilen gezählt werden.
Allerdings erhalten Sie wahrscheinlich eine Fehlermeldung, wenn Sie versuchen, DISTINCT
zu verwenden bei Verwendung des Sternchen-Platzhalters.
Hier ist eine Tabelle mit doppelten Zeilen.
Postal State ---------- ------------------ NSW New South Wales NSW New South Wales QLD Queensland TAS Tasmania SA South Australia WA Western Australia VIC Victoria
Theoretisch sollte ich in der Lage sein, DISTINCT
zu verwenden um die „deduplizierten“ Zeilen in dieser Tabelle zu zählen. Das scheint jedoch nicht möglich zu sein.
SELECT count(DISTINCT *)
FROM States;
Ergebnis:
Error: near "*": syntax error
Stattdessen muss ich einen Spaltennamen angeben, wenn ich DISTINCT
verwende Schlüsselwort.
SELECT
count(State),
count(DISTINCT State)
FROM States;
Ergebnis:
count(State) count(DISTINCT State) ------------ --------------------- 7 6
Eine andere Möglichkeit wäre, so etwas zu tun:
SELECT count(*) FROM (SELECT DISTINCT * FROM States);
Ergebnis:
6
Dies sollte jedoch kein wirkliches Problem darstellen, da es im Allgemeinen kein gutes Datenbankdesign ist, doppelte Zeilen wie diese zuzulassen.