Hi,

Try casting  it to numeric or use an expression that avoids floating-point 
rounding off :

WITH dataset AS (
    SELECT x, CAST(0.125 AS numeric) AS y
    FROM generate_series(0, 5) AS x
)
SELECT corr(x, y) FROM dataset;



Thanks & Regards

Dinesh Nair


________________________________
From: Tom Lane <[email protected]>
Sent: Tuesday, August 26, 2025 11:04 PM
To: Maxim Orlov <[email protected]>
Cc: Postgres hackers <[email protected]>
Subject: Re: Aggregate Function corr does not always return the correct value

Caution: This email was sent from an external source. Please verify the 
sender’s identity before clicking links or opening attachments.

Maxim Orlov <[email protected]> writes:
> One of the clients complained as to why the query for calculating the
> correlation coefficient with the CORR function yielded such weird
> results. After a little analysis, it was discovered that they were
> calculating the correlation coefficient for two sets, one of which is
> more or less random and the other of which is simply a set of constant
> values (0.09 if that matters). As a result, they were attaining
> unexpected results. However, as far as I am aware, they should have
> received NULL because it is impossible to calculate the standard
> deviation for such a set.

[ shrug... ]  Calculations with float8 are inherently inexact, so
it's unsurprising that we sometimes fail to detect that the input
is exactly a horizontal or vertical line.  I don't think there is
anything to be done here that wouldn't end in making things worse.

                        regards, tom lane


Reply via email to