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

Tổng, Trung bình, Tối đa, Tối thiểu, Đếm giá trị NULL

Đây là một câu hỏi hay và không có câu trả lời hay. Xử lý NULL trong hai ví dụ của bạn là khác nhau.

Vấn đề cơ bản là NULL có nghĩa. Thông thường, nó được sử dụng để biểu thị thiếu các giá trị. Tuy nhiên, trong tiêu chuẩn ANSI, nó là viết tắt của chưa biết giá trị. Tôi chắc rằng các triết gia có thể dành nhiều chủ đề cho sự khác biệt giữa "mất tích" và "không xác định".

Trong một biểu thức đơn giản (boolean hoặc số học hoặc vô hướng thuộc loại khác), ANSI xác định kết quả là "chưa biết" trong hầu hết các trường hợp khi bất kỳ toán hạng nào là "không xác định". Có một số ngoại lệ:NULL AND FALSE là false và NULL IS NULL là đúng, nhưng những điều này rất hiếm.

Đối với các phép toán tổng hợp, hãy nghĩ đến SUM() là "tổng tất cả các giá trị đã biết", v.v. SUM() xử lý NULL các giá trị khác với + . Tuy nhiên, hành vi này cũng là tiêu chuẩn để đó là cách tất cả các cơ sở dữ liệu hoạt động.

Nếu bạn muốn một NULL giá trị cho một tập hợp khi bất kỳ các toán hạng của nó là NULL , thì bạn cần sử dụng CASE . Tôi nghĩ cách dễ nhất cho một cột là:

(CASE WHEN COUNT(col) = COUNT(*) THEN SUM(COL) END)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Nhận X các mục nhập cuối cùng từ post_type 'tùy chỉnh' đếm từng người dùng số post_type tùy chỉnh

  2. Sử dụng bí danh cột trong mệnh đề WHERE của truy vấn MySQL tạo ra lỗi

  3. Những gì cần giám sát trong MySQL 8.0

  4. Sử dụng các hàm tổng hợp trong truy vấn SQL

  5. Cách ClusterControl định cấu hình IP ảo và Điều gì sẽ xảy ra trong quá trình chuyển đổi dự phòng