postgresql - 当 n<2 时,postgres STDDEV 聚合行为

标签 postgresql null statistics aggregate standard-deviation

我的 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 , 然而, StatisticsValue返回 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行,无济于事。可以做什么???

最佳答案

COALESCE 应该有效。

您也可以使用(适合您的)“population standard deviatio n”stddev_pop,而不是“sample standard deviation”stddev_samp;后者除以 n-1 并别名为 STDDEV。相反,stddev_pop 除以 n,并在给定一个样本时返回零(而不是 NULL)。

如果您不知道这些估计量之间的区别,在每本统计教科书中都有解释,例如 http://en.wikipedia.org/wiki/Standard_deviation#Estimation

关于postgresql - 当 n<2 时,postgres STDDEV 聚合行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214732/

相关文章:

python - 属性错误 : 'NoneType' object has no attribute '_instantiate_plugins' while creating engine

arrays - 与 AND 类似的 Postgres

php - 使用 MySQLi 插入 NULL 而不是空值

java - 计算 Inv 卡方 Java

sql - 性能差异 "insert into select"与 "select and loop for insert"

sql-server - 使用 DBNull 或 null 插入/更新数据?

javascript - 使用三元运算符检查 null

php - 数据库或文件记录保存 - php

r - 如何在 R ggplot 中制作此行列表的直方图?

python - sqlite 中的 Django hstore 字段