6EQ*_*58b 8 postgresql alias 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;
Run Code Online (Sandbox Code Playgroud)
正在获取:错误:»pjz«列不存在。
我该怎么做?
其他选项是通过WITH语句包围查询 - 例如:
WITH x as (
SELECT coalesce(SUM(X.Count)*3600, 0) AS PJZ, X.Mass
FROM X
WHERE X.Mass > 2000
)
SELECT * from X WHERE PJZ >=10
Run Code Online (Sandbox Code Playgroud)
在我看来,这比代码重复要好得多
将其包装到派生表中:
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;
Run Code Online (Sandbox Code Playgroud)
(请注意,我添加了缺少的组,否则查询将无效)
您不能在hading中使用别名,而必须在hading cluause中重复该语句。由于您只想检查null,因此可以这样做:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7232 次 |
| 最近记录: |