sql >> Databasteknik >  >> RDS >> Mysql

MySQL:medelvärdesberäkning med nollvärden

Aggregerade funktioner (SUM, AVG, COUNT, etc) i SQL exkluderar alltid NULL automatiskt.

Så SUM(kol) / COUNT(kol) =AVG(kol) - det här är bra och konsekvent.

Specialfallet COUNT(*) räknar varje rad.

Om du skapar ett uttryck med NULL:A + B där antingen A eller B är NULL, kommer A + B att vara NULL oavsett om den andra kolumnen är NULL.

När det finns NULL, i allmänhet, AVG(A + B) <> AVG(A) + AVG(B), och de kommer sannolikt att ha olika nämnare också. Du skulle behöva radbryta kolumnerna:AVG(COALESCE(A, 0) + COALESCE(B, 0)) för att lösa det, men kanske också utesluta fallet där COALESCE(A, 0) + COALESCE(B, 0).

Baserat på din kod skulle jag föreslå:

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. Hur man använder Regexp i MySQL Replace-kommandon?

  2. Kontrollerar om mysql-användare finns

  3. Korrekt PDO-syntax för parametriserad fråga med LIKE med jokertecken (ex %, _)

  4. SQL Query Join i CodeIgniter