我需要在Postgres做个矿藏,但不起作用,请帮帮我
SELECT
(CS1_PDM_D_Mini + CS2_PDM_D_Mini + CS3_PDM_D_Mini) /
SUM(CS1_PDM_D_Mini) + SUM(CS2_PDM_D_Mini) + SUM(CS3_PDM_D_Mini)
AS My_CS_PDM_D_Mini
FROM mytable我有以下错误:
列"drive.cs1_pdm_d_mini“必须出现在GROUP子句中,或用于聚合函数中。
最后编辑:
嘿,伙计,非常感谢你的帮助,最后,我终于得到了这样的结果:
(COALESCE(sum(Drive.CS1_PDM_D_Mini),0)+COALESCE(sum(Drive.CS2_PDM_D_Mini),0)+COALESCE(sum(Drive.CS3_PDM_D_Mini),0)) /
CASE ((count(CS1_PDM_D_Mini) + count(CS2_PDM_D_Mini) + count(CS3_PDM_D_Mini)))
WHEN 0 THEN 1
ELSE
((count(CS1_PDM_D_Mini) + count(CS2_PDM_D_Mini) + count(CS3_PDM_D_Mini)))
END AS My_CS_PDM_D_Mini, 增加了一个管理除以零的案例!
发布于 2017-01-17 11:51:34
如果我正确地指出,您正试图计算每行的值在所有行的总数中的比例,那么下面的查询应该会这样做。
SELECT
(CS1_PDM_D_Mini + CS2_PDM_D_Mini + CS3_PDM_D_Mini) /
(SUM(CS1_PDM_D_Mini) OVER () + SUM(CS2_PDM_D_Mini) OVER () + SUM(CS3_PDM_D_Mini) OVER ())
AS My_CS_PDM_D_Mini
FROM mytableSUM(CS1_PDM_D_Mini) OVER ()位使用一个窗口表达式来获取所有行的和,而不仅仅是查看当前行。
在https://www.postgresql.org/docs/current/static/tutorial-window.html中描述的窗口函数
这将只返回分数列表,例如: 0.5行,占总数的50%。因此,您可能希望返回行的键(如果有)。这可以添加到select:
SELECT
meaningful_row_key,
(CS1_PDM_D_Mini + CS2_PDM_D_Mini + CS3_PDM_D_Mini) /
(SUM(CS1_PDM_D_Mini) OVER () + SUM(CS2_PDM_D_Mini) OVER () + SUM(CS3_PDM_D_Mini) OVER ())
AS My_CS_PDM_D_Mini
FROM mytable发布于 2017-01-17 11:25:51
请用这个
SELECT SUM(CS1_PDM_D_Mini) + SUM(CS2_PDM_D_Mini) + SUM(CS3_PDM_D_Mini) /
(CS1_PDM_D_Mini + CS2_PDM_D_Mini + CS3_PDM_D_Mini) AS My_CS_PDM_D_Mini
FROM mytable
group by CS1_PDM_D_Mini
,CS2_PDM_D_Mini
,CS3_PDM_D_Minihttps://stackoverflow.com/questions/41695739
复制相似问题