Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:uśrednianie z wartościami null

Funkcje agregujące (SUM, AVG, COUNT itp.) w SQL zawsze automatycznie wykluczają NULL.

Więc SUM(col) / COUNT(col) =AVG(col) — to jest świetne i spójne.

Specjalny przypadek COUNT(*) liczy każdy wiersz.

Jeśli stworzysz wyrażenie z wartościami NULL:A + B, gdzie A lub B to NULL, wtedy A + B będzie NULL, niezależnie od tego, czy inna kolumna będzie NULL.

Ogólnie rzecz biorąc, jeśli istnieją wartości NULL, AVG(A + B) <> AVG(A) + AVG(B) i prawdopodobnie będą miały również różne mianowniki. Aby rozwiązać ten problem, musiałbyś zawinąć kolumny:AVG(COALESCE(A, 0) + COALESCE(B, 0)) ale być może również wykluczyć przypadek, w którym COALESCE(A, 0) + COALESCE(B, 0).

Na podstawie Twojego kodu sugerowałbym:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie są praktyczne różnice między poleceniami „ZAMIEŃ” i „WSTAW… NA ZDUPLIKOWANY KLUCZ UPDATE” w MySQL?

  2. tworzenie tabel relacyjnych w mysql

  3. Max tabele i wzór projektowy

  4. Liczba Mysql liczba dopasowań regex na pole

  5. MySQL - wyklucz wszystkich zablokowanych użytkowników z wyników