在SQL中使用where子句

问题描述

我正在使用postgre sql,并且where子句有问题。

我想做的是:

  1. 将每个月的数据与上个月的数据进行比较
  2. 选择八月与七月比率低于0.7的位置

下面是我的代码。我使用 cast作为十进制,因为没有它,结果就是整数(0或1)。

如果我运行查询,它不会返回任何结果。它没有说错误,但是8月

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

请注意,您现有的查询表明设计不良。出于多种原因(可伸缩性,效率,可维护性...),您不应每个月将其存储在单独的表中。相反,您应该将每个月放在单独的行中。