私がコメントで述べたように、サンプルの標準偏差を手動で調整するには、ある時点で間隔を間隔で掛けます。 PostgreSQLはこれをサポートしていません。
この問題を回避するには、間隔を時間または分または秒(または何でも)に短縮します。これは計算を手動で行うよりもずっと簡単で、PostgreSQLがこの種の計算をサポートしていない理由を示唆しています。
まず、PostgreSQL general mailing list
CREATE OR REPLACE FUNCTION interval_to_seconds(interval)
RETURNS double precision AS $$
SELECT (extract(days from $1) * 86400)
+ (extract(hours from $1) * 3600)
+ (extract(minutes from $1) * 60)
+ extract(seconds from $1);
$$ LANGUAGE SQL;
からの機能は今、私たちは、間隔の簡単なセットの標準偏差を取ることができます。
with intervals (i) as (
values (interval '1 hour'), (interval '2 hour'), (interval '3 hour'),
(interval '4 hour'), (interval '5 hour')
)
, intervals_as_seconds as (
select interval_to_seconds(i) as seconds
from intervals
)
select stddev(seconds), stddev(seconds)/60
from intervals_as_seconds
in_sec in_min
double precision double precision
--
5692.09978830308 94.8683298050514
あなたが好きしかし、結果を確認することができます。
ここで、秒単位ではなく時間単位を指定したいとします。明らかに、粒度の選択は高度にアプリケーションに依存します。別の関数、interval_to_hours(interval)
を定義することもできます。非常に似たクエリを使用して、標準偏差を計算することができます。
with intervals (i) as (
values (interval '1 hour'), (interval '2 hour'), (interval '3 hour'),
(interval '4 hour'), (interval '5 hour')
)
, intervals_as_hours as (
select interval_to_hours(i) as hours
from intervals
)
select stddev(hours) as stddev_in_hrs
from intervals_as_hours
stddev_in_hrs
double precision
--
1.58113883008419
時間における標準偏差の値は、分または秒の値とは明らかに異なります。しかし、彼らはまったく同じことを測定します。重要な点は、「正しい」答えは、使用したい粒度(単位)に依存し、多くの選択肢があることです。 (マイクロ秒から何世紀にもわたる)想像してみてください。
select interval_to_hours(interval '45 minutes')
interval_to_hours
double precision
--
0
ことは、正しい答えますか?あなたは言うことができません。正しい答えはアプリケーションに依存します。 45分を1時間と見なすアプリケーションを想像することができます。私はまた、いくつかのの計算では1時間と見なされ、の場合には0時間として他のの計算では45分が必要と思われるアプリケーションを想像することもできます。
この質問について考えてみましょう。 1ヵ月に何秒ありますか?式select interval '1' month;
が有効です。秒数は月に何日あるかによって異なります。
私はだと思っています。それはだと思うのですが、PostgreSQLはこの種の計算をサポートしていません。インターバル引数でそれを行う正しい方法はアプリケーションにも依存します。
後で。 。 。
この記事は、PostgreSQLのメーリングリストの1つで見つかりました。
No stddev() for interval?
2つの日時フィールドの違いは、数値として私を打ちます。 –
それは私も考えたものですが、違いは日付タイプの間隔であり、これらの関数は間隔の入力を受け付けませんが、平均は私には意味がありません。 – Manquer
@DanBracuk 2つのタイムスタンプの違いは「間隔」 –