我试图从表occu_cap中获得平均占用率,但我得到了错误"错误:除以零".两列中都有0个值.

SELECT *, AVG((occupancy/capacity) * 100)) AS avg_occupancy_rate
FROM occu_cap
GROUP BY 1,2,3

样本数据和预期结果:

occupancy capacity avg_occupancy_rate
1232 1630 75.58
0 658 null
0 0 null

推荐答案

错误是由于capacity0值(这可能不允许数学除法),如果您的预期结果是0,那么capacityoccupancy/capacity0

AVG((COALESCE(occupancy / NULLIF(capacity,0), 0) * 100))

Edit

您可以try 使用CASE WHEN表达式来判断值是否为零,然后返回NULL

AVG(CASE WHEN capacity <> 0 AND occupancy <> 0 THEN ((occupancy::decimal/capacity * 1.0) * 100) END)

如果要显示所有列,可以try 使用窗口功能.

SELECT *,AVG(CASE WHEN capacity <> 0 AND occupancy <> 0 THEN ((occupancy::decimal/capacity * 1.0) * 100) END) OVER(PARTITION BY id)
FROM occu_cap

NOTE

如果你的occupancycapacity不是浮点数的类型,我们需要在做AVG之前将其作为浮点数

sqlfiddle

Postgresql相关问答推荐

Postgs密码重置问题

将real[]数组作为完整的浮点值从postquist返回

利用PostgreSQL查询中表的顺序来计算包含每次时间的时间范围

横向联接返回的行数太多

读取扩展坞合成中的UDP:IO/超时

复合索引列的顺序导致不同的计划

我应该如何更新热门表?

为什么我的唯一索引在 Postgresql 中不起作用?

在 Age Viewer 上看不到 node 的第一个属性

从 PostgreSQL 中的每个组中抽取 N 个样本

PostgreSQL 中的复制槽是否会阻止删除 WALL,即使它们来自另一个数据库?

postgreSQL 中对 utf-8 的 LC_COLLATE 和 LC_CTYPE 支持

如何在 Postgres 中的列上删除唯一约束?

如何使用 SpringBoot + JPA 存储 PostgreSQL jsonb?

带有 postgres 的 DOCKER 容器,警告:could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted

在 Windows 10 中执行时,Docker 容器关闭并给出data directory has wrong ownership错误

在 Postgresql 中拆分逗号分隔的字段并对所有结果表执行 UNION ALL

如何语法判断 PostgreSQL 配置文件?

null 计算结果为 false 的情况

Array Push的 Postgres 数组追加和数组长度