0
以下查询使用子查询来计算加权值。我收到的问题是一个除0错误的随机发生的真0值聚合以及从子查询可能的> 0聚合返回。Postgresql查询结果除以0在使用大小写检查后0
SELECT
table1.id,
SUM(subquery1.total_value_1),
CASE
WHEN SUM(subquery1.total_value_1) = 0 THEN 0
ELSE ROUND(SUM(percentage_value * (table1.value_1 /subquery1.total_value_1 ::FLOAT)) ::NUMERIC,2)
END AS percentage_value
FROM
table1,
(SELECT
id,
SUM(value_1) AS total_value_1
FROM
table1
WHERE
report_time BETWEEN '2016-10-28 00:00' AND '2016-10-29 23:59'
GROUP BY
id
) subquery1
WHERE
table1.id = subquery1.id
AND report_time BETWEEN '2016-10-28 00:00' AND '2016-10-29 23:59'
AND table1.id = 12572
GROUP BY
table1.id
ORDER BY
table1.id
在某些情况下,CASE语句是还在做师的评估,尽管subquery1.total_value_1是0。只是要注意的价值,也没有可能性subquery1.total_value_1为NULL,作为表如果未定义添加的值,则在插入时将该值默认为0。
然而,如果你把'table1.value_1/subquery1.total_value_1 :: FLOAT'改成'table1.value_1 /最大(0.00000000001,subquery1.total_value_1 :: FLOAT)' - 会发生什么?.. –
你确定你需要嵌套选择吗? – McNets
你能告诉我们table1的模式吗? – McNets