Mysql
 sql >> база данни >  >> RDS >> Mysql

Сума, Средно, Макс., Мин., Брой на NULL стойности

Това е добър въпрос и такъв, който няма добър отговор. Лечението на NULL в двата ви примера е различно.

Основният проблем е какво NULL означава. Обикновено се използва за обозначаване на липсващи стойности. Въпреки това, в стандарта ANSI това означава неизвестно стойност. Сигурен съм, че философите биха могли да посветят томове на разликата между „липсващ“ и „неизвестен“.

В прост израз (булев или аритметичен или скаларен от друг вид), ANSI дефинира резултата от "неизвестно" в почти всички случаи, когато някой от операндите е "неизвестен". Има някои изключения:NULL AND FALSE е false и NULL IS NULL е вярно, но те са рядкост.

За операциите за агрегиране помислете за SUM() като "сумиране на всички известни стойности" и т.н. SUM() третира NULL стойности, различни от + . Но това поведение също е стандартно, така че всички бази данни работят по този начин.

Ако искате NULL стойност за агрегиране, когато някакво на неговите операнди е NULL , тогава трябва да използвате CASE . Мисля, че най-лесният начин за една колона е:

(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. Mysql оптимизация, базирана на обяснение

  2. LIMIT отместване или OFFSET в UPDATE SQL заявка

  3. Как да вмъкна ред без никакви стойности, така че всички колони да приемат стойността си по подразбиране?

  4. Преобразувайте местното TIME_STAMP в UTC време

  5. MySQL DATEDIFF() срещу TIMEDIFF():Каква е разликата?