私のPostgres
クエリaggregate
は、一連のセンサー読み取り値から統計を計算します。
SELECT to_char(ipstimestamp, 'YYYYMMDDHH24') As row_name,
to_char(ipstimestamp, 'FMDD mon FMHH24h') As hour_row_name,
varid As category,
(AVG(ipsvalue)::NUMERIC(5,2)) ||', ' ||
(MAX(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(MIN(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(STDDEV(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' As StatisticsValue
FROM loggingdb_ips_integer As log
JOIN ipsobjects_with_parent ips ON log.varid = ips.objectid
AND (ipstimestamp > (now()- '2 days'::interval))
GROUP BY row_name, hour_row_name, category;
私が持っている限り、これはうまくいきます>1 ipsvalue/hour
。COUNT(ipsvalue)<2
ただし、hourlyがPostgres エラーなしでStatisticsValue
返される場合。NULL
次のように をコメントアウトするSTTDEV
と、次のようになります。
(AVG(ipsvalue)::NUMERIC(5,2)) ||', ' ||
(MAX(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(MIN(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' As value
その後、3 つの統計情報がすべて正しく計算されます。STDDEV
したがって、私は、不法行為はクエリ全体を無効にすると結論付けています。私はむしろ不正な STDDEV が 0 を返すことを望んでいCOALESCE
ますSTDDEV
。何ができる?