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

Suma, średnia, maksymalna, minimalna, liczba wartości NULL

To dobre pytanie, na które nie ma dobrej odpowiedzi. Traktowanie NULL w twoich dwóch przykładach jest inny.

Podstawowym problemem jest to, co NULL oznacza. Zwykle jest używany do oznaczenia brakującego wartości. Jednak w standardzie ANSI oznacza nieznany wartość. Jestem pewien, że filozofowie mogliby poświęcić tomy na różnicę między „zaginionym” a „nieznanym”.

W prostym wyrażeniu (boolowskim, arytmetycznym lub skalarnym innego rodzaju) ANSI definiuje wynik „nieznany” w prawie wszystkich przypadkach, gdy którykolwiek z operandów jest „nieznany”. Istnieje kilka wyjątków:NULL AND FALSE jest fałszywe, a NULL IS NULL to prawda, ale są to rzadkie przypadki.

W przypadku operacji agregacji pomyśl o SUM() jako „zsumuj wszystkie znane wartości” i tak dalej. SUM() traktuje NULL wartości inne niż + . Ale to zachowanie jest również standardowe, więc tak działają wszystkie bazy danych.

Jeśli chcesz NULL wartość dla agregacji, gdy dowolny jego operandów to NULL , musisz użyć CASE . Myślę, że najłatwiejszym sposobem na pojedynczą kolumnę jest:

(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. Konkatenacja kolumn zwraca Null Mysql - Php

  2. Sterownik MySQL dla Rails w Windows 7 x64

  3. Jak wygląda składnia Alter Table przy dodawaniu kolumny DATETIME?

  4. mysql wybierz różne wiersze w kolumnie listy rozdzielanej przecinkami

  5. PHP MySQL - Co 6 wierszy wstawiasz div?