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

Jak funguje SQLite Avg()

SQLite avg() funkce vrací průměrnou hodnotu všech hodnot, které nejsou NULL v rámci skupiny.

Přijímá jeden argument, kterým je hodnota nebo skupina hodnot.

Příklad

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

ProductId   ProductName            Price     
----------  ---------------------  ----------
1           Blue Widgets (6 Pack)  389.45    
2           Widget Holder          139.5     
3           Widget Opener          89.27     
4           Foobar Set             120.0     

Můžeme použít avg() k získání průměrné hodnoty z Ceny sloupec. Takhle:

SELECT avg(Price) FROM Products;

Výsledek:

184.555

Jak klauzule WHERE ovlivňuje výsledek

Pokud váš dotaz používá WHERE klauzule, bude průměr vypočítán za WHERE doložka vstoupila v platnost. Jinými slovy, můžete použít WHERE klauzule, která zajistí, že avg() funkce vypočítá pouze ty řádky, které vás zajímají.

Zde je to, co se stane, když přidám WHERE klauzule k předchozímu příkladu.

SELECT avg(Price) 
FROM Products
WHERE ProductName LIKE '%widget%';

Výsledek:

206.073333333333

Zaokrouhlit výsledek

Výsledek je vrácen jako hodnota s plovoucí desetinnou čárkou (pokud není NULL). Můžete použít round() funkci zaokrouhlit hodnotu podle potřeby.

SELECT round(avg(Price), 2)
FROM Products
WHERE ProductName LIKE '%widget%';

Výsledek:

206.07

Omezení výsledků

LIMIT klauzule neovlivňuje výpočet avg() funkce – je vrácen pouze jeden řádek s avg() stejně fungovat.

SELECT avg(Price) 
FROM Products
LIMIT 1;

Výsledek:

184.555

To znamená, že poskytnutím limitu nula nebude vráceno nic.

Řetězce a objekty BLOB

Hodnoty řetězců a BLOB, které nevypadají jako čísla, jsou interpretovány jako 0.

SELECT avg(ProductName) FROM Products;

Výsledek:

0.0

Argumenty NULL

Pokud neexistují žádné jiné vstupy než NULL, funkce avg() vrátí hodnotu NULL.

SELECT avg(NULL);

Výsledek:

 

(Tento výsledek je NULL).

Pokud však existuje alespoň jeden argument jiný než NULL, nevrátí hodnotu NULL.

Abych to demonstroval, zde vložím nový řádek, ale ponechám Cena sloupec na NULL:

INSERT INTO Products (ProductId, ProductName) 
VALUES (5, 'Red Widget');
SELECT * FROM Products;

Výsledek:

ProductId   ProductName            Price     
----------  ---------------------  ----------
1           Blue Widgets (6 Pack)  389.45    
2           Widget Holder          139.5     
3           Widget Opener          89.27     
4           Foobar Set             120.0     
5           Red Widget                       

Poslední řádek tedy nemá cenu – Cena sloupec je NULL.

Nyní, když použiji avg() funkce, stále vrací průměr všech řádků, které nejsou NULL.

SELECT avg(Price) FROM Products;

Výsledek:

184.555

Klíčové slovo DISTINCT

Můžete použít DISTINCT klíčové slovo pro výpočet průměru pouze odlišných hodnot ve sloupci. To má za následek odstranění jakýchkoli duplicitních hodnot z výpočtu.

Příklad viz Vyladění výsledků Avg() v SQLite pomocí klíčového slova DISTINCT.


  1. Relační vs nerelační databáze:Jaký je rozdíl?

  2. Příkaz Oracle insert if neexistuje

  3. Získání minimálně dvou hodnot v SQL

  4. Vazba parametrů dotazu podle názvu s ODP.NET