Bij gebruik van de count()
functie in SQLite, bevindt u zich mogelijk in de situatie waarin u alleen afzonderlijke waarden wilt tellen. Dat wil zeggen, u wilt niet dat dubbele waarden meerdere keren worden geteld.
Met andere woorden, als de kolom meerdere keren dezelfde waarde heeft, mag deze die waarde maar één keer tellen.
Standaard count()
zal alle dubbele waarden in zijn berekening opnemen. Als de waarde "Kat" bijvoorbeeld 3 keer voorkomt, count()
telt dat als 3.
Als u echter alleen afzonderlijke waarden wilt tellen, dan count()
zou het tellen als 1.
Gelukkig is er een eenvoudige manier om dit te doen. Het enige wat je hoeft te doen is de DISTINCT
zoekwoord naar uw count()
functie. Zoals dit:
count(DISTINCT x)
Waar x
is de kolomnaam waarvoor u de inhoud meet (of de hele rij als u het asterisk-jokerteken gebruikt).
Voorbeeld
Neem de volgende tabel:
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
Merk op dat de rijen 2 tot en met 4 allemaal dezelfde prijs hebben (10,0).
Als ik een normale count()
doe op de Prijs kolom, telt het alle zes rijen.
SELECT count(Price) FROM Products;
Resultaat:
6
Als ik echter de DISTINCT
zoekwoord, telt deze drie rijen als één.
SELECT count(DISTINCT Price) FROM Products;
Resultaat:
4
Tel verschillende rijen
De count()
functie accepteert de asterisk wildcard (*
), wat betekent dat het alle rijen telt.
U krijgt echter waarschijnlijk een foutmelding als u DISTINCT
. probeert te gebruiken bij gebruik van het asterisk-jokerteken.
Hier is een tabel met dubbele rijen.
Postal State ---------- ------------------ NSW New South Wales NSW New South Wales QLD Queensland TAS Tasmania SA South Australia WA Western Australia VIC Victoria
In theorie zou ik DISTINCT
. moeten kunnen gebruiken om de "ontdubbelde" rijen in deze tabel te tellen. Dat lijkt echter niet mogelijk.
SELECT count(DISTINCT *)
FROM States;
Resultaat:
Error: near "*": syntax error
In plaats daarvan moet ik een kolomnaam opgeven bij het gebruik van de DISTINCT
zoekwoord.
SELECT
count(State),
count(DISTINCT State)
FROM States;
Resultaat:
count(State) count(DISTINCT State) ------------ --------------------- 7 6
Een andere manier om dit te doen is door zoiets als dit te doen:
SELECT count(*) FROM (SELECT DISTINCT * FROM States);
Resultaat:
6
Dit zou echter niet echt een probleem moeten zijn, aangezien het over het algemeen geen goed database-ontwerp is om dubbele rijen zoals deze toe te staan.