sql >> Database teknologi >  >> RDS >> Mysql

MySQL:gennemsnit med nuller

Aggregerede funktioner (SUM, AVG, COUNT osv.) i SQL ekskluderer altid automatisk NULL.

Så SUM(col) / COUNT(col) =AVG(col) - dette er fantastisk og konsekvent.

Specialtilfældet COUNT(*) tæller hver række.

Hvis du laver et udtryk med NULL:A + B, hvor enten A eller B er NULL, så vil A + B være NULL, uanset om den anden kolonne er NULL.

Når der er NULLs, generelt, AVG(A + B) <> AVG(A) + AVG(B), og de vil sandsynligvis også have forskellige nævnere. Du skal pakke kolonnerne:AVG(COALESCE(A, 0) + COALESCE(B, 0)) for at løse det, men måske også udelukke tilfældet, hvor COALESCE(A, 0) + COALESCE(B, 0).

Baseret på din kode vil jeg foreslå:

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. Kald til lagret procedure, når procedurenavn i en variabel i mysql

  2. Kan ikke oprette forbindelse til localhost, men kan med computernavn i SQL Server 2008

  3. CURRENT_TIMESTAMP Eksempler – MySQL

  4. MySQL :er ikke i GROUP BY