SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Usuń duplikaty z wyników Count() w SQLite

Używając count() funkcji w SQLite, możesz znaleźć się w sytuacji, w której chcesz liczyć tylko różne wartości. Oznacza to, że nie chcesz, aby zduplikowane wartości były liczone wielokrotnie.

Innymi słowy, jeśli kolumna ma tę samą wartość wiele razy, powinna policzyć tę wartość tylko raz.

Domyślnie count() uwzględni w swoich obliczeniach wszystkie zduplikowane wartości. Na przykład, jeśli wartość „Kot” pojawi się 3 razy, count() policzy to jako 3.

Jeśli jednak chcesz, aby były liczone tylko różne wartości, wtedy count() policzyłoby to jako 1.

Na szczęście jest na to prosty sposób. Wszystko, co musisz zrobić, to dodać DISTINCT słowo kluczowe do Twojego count() funkcjonować. Tak:

count(DISTINCT x)

Gdzie x to nazwa kolumny, dla której liczysz zawartość (lub cały wiersz, jeśli używasz symbolu wieloznacznego gwiazdki).

Przykład

Weź poniższą 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     

Zauważ, że wszystkie wiersze od 2 do 4 mają tę samą cenę (10,0).

Jeśli wykonam normalne count() w Cenie kolumna, policzy wszystkie sześć wierszy.

SELECT count(Price) FROM Products;

Wynik:

6

Jeśli jednak dodam DISTINCT słowo kluczowe, zliczy te trzy wiersze jako jeden.

SELECT count(DISTINCT Price) FROM Products;

Wynik:

4

Policz odrębne wiersze

count() funkcja akceptuje symbol wieloznaczny gwiazdki (* ), co oznacza, że ​​policzy wszystkie wiersze.

Jednak prawdopodobnie wystąpi błąd, jeśli spróbujesz użyć DISTINCT podczas używania symbolu wieloznacznego gwiazdki.

Oto tabela ze zduplikowanymi wierszami.

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

Teoretycznie powinienem być w stanie użyć DISTINCT aby policzyć wiersze „zdeduplikowane” w tej tabeli. Jednak wydaje się to niemożliwe.

SELECT count(DISTINCT *)
FROM States;

Wynik:

Error: near "*": syntax error

Zamiast tego muszę określić nazwę kolumny podczas korzystania z DISTINCT słowo kluczowe.

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

Wynik:

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

Innym sposobem na to byłoby zrobienie czegoś takiego:

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

Wynik:

6

Nie powinno to jednak stanowić problemu, ponieważ generalnie nie jest dobrym projektem bazy danych zezwalanie na duplikowanie wierszy w ten sposób.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw wiele wierszy w błędzie SQLite (kod błędu =1)

  2. Operator INTERSECT SQLite

  3. Dodaj dni do daty w SQLite

  4. Jak działa SQLite Quote()

  5. Jak obliczyć różnicę między dwiema datami w SQLite