我的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
但是,如果 hourlyStatisticsValue
返回时NULL
没有任何 Postgres 错误。
如果我注释掉STTDEV
,如下所示:
(AVG(ipsvalue)::NUMERIC(5,2)) ||', ' ||
(MAX(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' ||
(MIN(ipsvalue)::NUMERIC(5,2))::TEXT ||', ' As value
然后正确计算所有三个统计数据。因此,我得出结论,一个不正当的人STDDEV
会破坏整个查询。我宁愿让非法的 STDDEV 返回 0。我尝试了COALESCE
这STDDEV
条线,但无济于事。可以做什么???