MW211 EXIT

devlog
PostgreSQL/avg()とNULL
2013年02月04日
「AVG()」は平均を計算する集合関数。
┌──────────────────────────────────────┐
│SELECT avg("c") FROM (VALUES (1),(2),(3)) AS "t"("c");                   →2│
└──────────────────────────────────────┘
「(1+2+3)÷3=2」となる。

では、母集団にNULLが混じっていた場合には?
┌──────────────────────────────────────┐
│SELECT avg("c") FROM (VALUES (1),(2),(NULL)) AS "t"("c");              →1.5│
└──────────────────────────────────────┘
NULLは無視される。で、「(1+2)÷2=1.5」となる。

ではでは、母集団がすべてNULLだった場合は?
┌──────────────────────────────────────┐
│SELECT avg("c"::numeric)                                                    │
│    FROM (VALUES (NULL),(NULL),(NULL)) AS "t"("c");                   →NULL│
└──────────────────────────────────────┘
「NULL」になる

ついでに、母集団がなかった場合には?
┌──────────────────────────────────────┐
│SELECT avg("c") FROM (VALUES (1),(2),(3)) AS "t"("c") WHERE FALSE;    →NULL│
└──────────────────────────────────────┘
これも「NULL」になる。

集合関数は、とにかく結果を一つ返して、
値を返すのが無理そうな時はNULLを返すって感じか。
分類:PostgreSQL