首页 > 解决方案 > 在 SQL 中使用 where 子句

问题描述

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

我想做的是:

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

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

如果我运行查询,它不会返回任何结果。它没有说错误,但是没有数据 august < 0.7 (但是有!我在没有 where 子句的情况下检查了原始表)

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

你能告诉我我的代码有什么问题吗?先感谢您

标签: sqlpostgresqlwhere-clause

解决方案


您不能在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

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


推荐阅读