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-列和參考它在一個條款) –