Understanding SUM(NULL) in MySQL

前端 未结 2 1484
没有蜡笔的小新
没有蜡笔的小新 2021-01-01 16:02

Usually when NULL is involved in any equation then the whole result resolves into NULL (e.g. SELECT 2 + NULL + 5 returns NULL

相关标签:
2条回答
  • 2021-01-01 16:25

    You are right, aggregate functions handles null values in a different way than non aggregate functions:

    select 2 + NULL + 5
    

    returns NULL because NULL on this context it means an unknown value, so the result will be NULL (unknown) as well.

    This will return 7 instead:

    select SUM(n)
    from (
      select 2 as n
      union all select null
      union all select 5
    ) s
    

    because on this context a NULL value, even if it is unknown, can be seen as a "not specified value". The reason is that it's very common to use NULL as a not specified value and it's little pratical use to include NULLs in an aggregate function, that's why aggregate functions are defined to ignore NULLs.

    0 讨论(0)
  • 2021-01-01 16:37

    Well it's explained in the manual

    SUM([DISTINCT] expr)
    Returns the sum of expr. If the return set has no rows, SUM() returns NULL. The DISTINCT keyword can be used to sum only the distinct values of expr.

    SUM() returns NULL if there were no matching rows.

    What's more it's also said that:

    This section describes group (aggregate) functions that operate on sets of values. Unless otherwise stated, group functions ignore NULL values.

    in other words SUM behaves like this because that's the way it's defined to be.

    0 讨论(0)
提交回复
热议问题