sql >> Database >  >> RDS >> Mysql

MySQL:middelen met nulls

Geaggregeerde functies (SUM, AVG, COUNT, enz.) in SQL sluiten NULL altijd automatisch uit.

Dus SUM(col) / COUNT(col) =AVG(col) - dit is geweldig en consistent.

Het speciale geval van COUNT(*) telt elke rij.

Als u een uitdrukking maakt met NULL's:A + B waarbij A of B NULL is, dan is A + B NULL, ongeacht of de andere kolom NULL is.

Als er NULL's zijn, is AVG(A + B) <> AVG(A) + AVG(B) over het algemeen ook een andere noemer. Je zou de kolommen moeten omwikkelen:AVG(COALESCE(A, 0) + COALESCE(B, 0)) om dat op te lossen, maar misschien ook het geval uitsluiten waarin COALESCE(A, 0) + COALESCE(B, 0).

Op basis van je code zou ik het volgende voorstellen:

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. php waarschuwing mysql_fetch_assoc

  2. Hoe moet ik MySQL opvragen en hoe de resultaten van MySQL in de cache plaatsen?

  3. Fout:PLS-00428:er wordt een into-clausule verwacht in deze select-instructie

  4. mysql ERROR 1426 (42000):Te grote precisie 14 opgegeven voor kolom 'tijd'. Maximale moeder is 6