sql >> Databáze >  >> RDS >> Mysql

MySQL:průměrování s nulami

Agregační funkce (SUM, AVG, COUNT atd.) v SQL vždy automaticky vylučují hodnotu NULL.

Takže SUM(sloupec) / COUNT(sloupec) =AVG(sloupec) – to je skvělé a konzistentní.

Speciální případ COUNT(*) počítá každý řádek.

Pokud vytvoříte výraz s NULL:A + B, kde buď A nebo B je NULL, pak A + B bude NULL bez ohledu na to, že druhý sloupec bude NULL.

Když existují hodnoty NULL, obecně AVG(A + B) <> AVG(A) + AVG(B) a pravděpodobně budou mít také různé jmenovatele. Abyste to vyřešili, museli byste zalomit sloupce:AVG(COALESCE(A, 0) + COALESCE(B, 0)), ale možná také vyloučit případ, kdy COALESCE(A, 0) + COALESCE(B, 0).

Na základě vašeho kódu bych navrhoval:

select avg(coalesce(col1, 0) + coalesce(col2, 0)), count(col3) from table1
where coalesce(col1, col2) is not null -- double nulls are eliminated
group by SomeArbitraryCol
having avg(coalesce(col1, 0) + coalesce(col2, 0)) < 500 and count(col3) > 3
order by avg(coalesce(col1, 0) + coalesce(col2, 0)) asc;


  1. Export tabulky mysql do souboru .txt nebo .doc pomocí PHP

  2. Načtěte výsledky dotazu podle pokynů v SQLAlchemy

  3. Získání návratové hodnoty z uložené procedury v C#

  4. Chytání špatné výjimky