sql >> Database >  >> RDS >> SQLite

Verwijder duplicaten uit Count() Resultaten in SQLite

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.


  1. Hoe maak je een back-up en herstel je een database als een kopie op dezelfde server?

  2. GTT-tabelstatistieken en SYS.WRI$_OPTSTAT_TAB_HISTORY

  3. Alfanumeriek sorteren met PostgreSQL

  4. Een csv importeren in mysql via de opdrachtregel