Re: Mathematical operations with NULL values - Mailing list pgsql-general

From Richard Huxton
Subject Re: Mathematical operations with NULL values
Date
Msg-id 416FA50A.7030900@archonet.com
Whole thread Raw
In response to Mathematical operations with NULL values  (Alexander Pucher <pucher@atlas.gis.univie.ac.at>)
List pgsql-general
Alexander Pucher wrote:
> Hi,
>
> given a table with some data, e.g. some monthly measures. Some of the
> measures are missing though.
>
>
> id   m1   m2   m3   m4   m5   ....   m12
> ----------------------------------------------
>
> 1    23    45    66    76    76    ....    12 2    76    NULL    77
> 88   77   ...    89
> 3    67   87   98   NULL   78   ...   NULL
>
> I would like the calculate the yearly average of each row, something
> like ((m1+m2+m3+m4+m5+...m12)/12). This would work if I had all montly
> values for one year. In the case of at least one NULL value involved, I
> would get NULL as result.
>
> So instead of dividing each year by 12, I would have to divide by the
> number of measures available in each row.

The "correct answer" is to structure your data differently. If you had a
table:
   measures (id, month_num, measurement)
you could then use:
   SELECT id, AVG(measurement) FROM measures GROUP BY id
You don't even need nulls any more, just don't record values for those
months you don't know about.

If you can't restructure your table, you'll need to write a procedure
that checks each value in turn for null-ness and calculates accordingly.

--
   Richard Huxton
   Archonet Ltd

pgsql-general by date:

Previous
From: Oleg Bartunov
Date:
Subject: Re: Tsearch2 trigger firing...
Next
From: "Najib Abi Fadel"
Date:
Subject: Re: Mathematical operations with NULL values