sql >> Databáze >  >> RDS >> SQLite

Odstraňte duplikáty z výsledků Count() v SQLite

Při použití count() funkce v SQLite, můžete se dostat do situace, kdy chcete počítat pouze odlišné hodnoty. To znamená, že nechcete, aby se duplicitní hodnoty započítávaly vícekrát.

Jinými slovy, pokud má sloupec stejnou hodnotu vícekrát, měl by tuto hodnotu počítat pouze jednou.

Ve výchozím nastavení count() zahrne do výpočtu všechny duplicitní hodnoty. Pokud se například hodnota „Cat“ objeví třikrát, count() bude to počítat jako 3.

Pokud však chcete, aby se počítaly pouze odlišné hodnoty, pak count() by to započítalo jako 1.

Naštěstí existuje snadný způsob, jak to udělat. Vše, co musíte udělat, je přidat DISTINCT klíčového slova na váš count() funkce. Takhle:

count(DISTINCT x)

Kde x je název sloupce, jehož obsah počítáte (nebo celý řádek, pokud používáte zástupný znak hvězdička).

Příklad

Vezměte si následující tabulku:

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     

Všimněte si, že všechny řádky 2 až 4 mají stejnou cenu (10,0).

Pokud udělám normální count() na ceně sloupec, bude počítat všech šest řádků.

SELECT count(Price) FROM Products;

Výsledek:

6

Pokud však přidám DISTINCT klíčové slovo, započítá tyto tři řádky jako jeden.

SELECT count(DISTINCT Price) FROM Products;

Výsledek:

4

Počítání odlišných řádků

count() funkce přijímá zástupný znak hvězdičky (* ), což znamená, že bude počítat všechny řádky.

Pokud se však pokusíte použít DISTINCT, pravděpodobně se zobrazí chyba při použití zástupného znaku hvězdička.

Zde je tabulka s duplicitními řádky.

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

Teoreticky bych měl být schopen používat DISTINCT k počítání „deduplikovaných“ řádků v této tabulce. Zdá se však, že to není možné.

SELECT count(DISTINCT *)
FROM States;

Výsledek:

Error: near "*": syntax error

Místo toho musím při použití DISTINCT zadat název sloupce klíčové slovo.

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

Výsledek:

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

Dalším způsobem, jak to udělat, by bylo udělat něco takového:

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

Výsledek:

6

To by však ve skutečnosti neměl být problém, protože obecně není dobrý návrh databáze, který umožňuje duplicitní řádky, jako je tento.


  1. MySQL - vynutit nepoužívat cache pro testování rychlosti dotazu

  2. Jak odstranit databázi v cPanel

  3. Jaké jsou hlavní rozdíly ve výkonu mezi datovými typy SQL Server varchar a nvarchar?

  4. Příkazy MySQL:Cheat Sheet of Common MySQL Queries