问题描述
我正在使用postgre sql,并且where子句有问题。
我想做的是:
- 将每个月的数据与上个月的数据进行比较
- 选择八月与七月比率低于0.7的位置
下面是我的代码。我使用 cast作为十进制,因为没有它,结果就是整数(0或1)。
SELECT location,round(cast(june as decimal)/may,3) as june,round(cast(july as decimal)/june,3) as july,round(cast(august as decimal)/july,3) as august
FROM per_country
WHERE august < 0.7
您能告诉我代码有什么问题吗?预先谢谢你
解决方法
您不能重用select
子句中where
子句中定义的别名。您需要重复该表达式,或使用派生表(子查询,cte):
SELECT location,round(june::numeric/may,3) as june,round(july::numeric/june,3) as july,round(august::numeric/july,3) as august
FROM per_country
WHERE august::numeric/july < 0.7
请注意,您现有的查询表明设计不良。出于多种原因(可伸缩性,效率,可维护性...),您不应每个月将其存储在单独的表中。相反,您应该将每个月放在单独的行中。