Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:tính trung bình với null

Các hàm tổng hợp (SUM, AVG, COUNT, v.v.) trong SQL luôn tự động loại trừ NULL.

Vì vậy, SUM (col) / COUNT (col) =AVG (col) - điều này rất tuyệt và nhất quán.

Trường hợp đặc biệt của COUNT (*) đếm mọi hàng.

Nếu bạn tạo một biểu thức với NULL:A + B trong đó A hoặc B là NULL, thì A + B sẽ là NULL bất kể cột khác là NULL.

Nói chung, khi có NULL, AVG (A + B) <> AVG (A) + AVG (B), và chúng cũng có thể có các mẫu số khác nhau. Bạn sẽ phải bao gồm các cột:AVG (COALESCE (A, 0) + COALESCE (B, 0)) để giải quyết điều đó, nhưng có lẽ cũng loại trừ trường hợp COALESCE (A, 0) + COALESCE (B, 0).

Dựa trên mã của bạn, tôi sẽ đề xuất:

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. .NET, C #, LINQ, SQL và OR-Mapping - Tôi không hiểu :(

  2. Phân tích cú pháp chuỗi thành ngày mysql

  3. Cách tắt kiểm tra khóa ngoại trong MySQL

  4. php-mysql tìm nạp id tiếp theo và trước đó từ cơ sở dữ liệu

  5. Không thể thêm ràng buộc khóa ngoại vào trường ngày tháng