SELECT
CASE WHEN SUM(X.Count)*3600 is null THEN '0'
ELSE
SUM(X.Count)*3600
END AS PJZ,
X.Mass
FROM X
WHERE X.Mass > 2000
HAVING ((X.Mass/PJZ * 100) - 100) >= 10;
获取:错误:列»pjz«不存在。PostgreSQL - 别名列和HAVING
我该怎么做这样的事情?
SELECT
CASE WHEN SUM(X.Count)*3600 is null THEN '0'
ELSE
SUM(X.Count)*3600
END AS PJZ,
X.Mass
FROM X
WHERE X.Mass > 2000
HAVING ((X.Mass/PJZ * 100) - 100) >= 10;
获取:错误:列»pjz«不存在。PostgreSQL - 别名列和HAVING
我该怎么做这样的事情?
裹成一个派生表:
SELECT CASE
WHEN PJZ = 0 THEN 100
ELSE PJZ
END as PJZ,
mass
FROM (
SELECT CASE
WHEN SUM(X.Count)*3600 is null THEN '0'
ELSE SUM(X.Count)*3600
END AS PJZ,
X.Mass
FROM X
WHERE X.Mass > 2000
GROUP BY X.mass
) t
WHERE PJZ = 0
OR ((X.Mass/PJZ * 100) - 100) >= 10;
(请注意,我用的,否则查询添加缺少的集团将不有效)
但现在我已经得到零除的问题。 PJZ可能为零。 – 6EQUJ5HD209458b
然后排除WHERE PJZ为零的行。或者根据您的要求返回CASE语句中的1(或任何其他非零值) –
我无法排除行,因为我也想看到它们。如果PJZ为0,则:((X.Mass/PJZ * 100) - 100)应该显示100。所以我需要另一个IF ELSE ... – 6EQUJ5HD209458b
你不能在拥有别名的情况下使用别名,并且必须在具有可疑的情况下复制该语句。既然你只是想检查空,你可以这样做:
SELECT coalesce(SUM(X.Count)*3600, 0) AS PJZ, X.Mass
FROM X
WHERE X.Mass > 2000
HAVING ((X.Mass/coalesce(SUM(X.Count)*3600, 0) * 100) - 100) >= 10;
[为什么我不能在计数(*)中使用别名](http://stackoverflow.com/questions/2068682/why-cant-i-use-alias-in-a-count-列和参考它在一个条款) –