不识别 WHERE 子句中的别名

not recognizing alias in WHERE clause

我正在尝试查询以下信息。没有 WHERE 子句,查询执行完美;但是,当我在 WHERE 子句中添加时,我收到别名 "error_percentage" 未被识别的错误。我还尝试使用 HAVING 而不是 WHERE,以及 LIMIT。

我应该如何使用我在 SELECT 子句中创建的别名来缩小查询范围?

SELECT date, ((CAST(error AS float) / CAST(success AS float)) *100) AS error_percentage
FROM daily_report
WHERE error_percentage > 1
ORDER BY error_percentage DESC;

谢谢!

列别名(此处:error_percentage)在构建结果集之前不可访问。 ORDER BY 不受影响,因为排序发生(必然)_after_the 结果集已检索。

使用

SELECT agg.*
  FROM (
          SELECT date, ((CAST(error AS float) / CAST(success AS float)) *100) AS error_percentage
            FROM daily_report
        ORDER BY error_percentage DESC
       ) agg
 WHERE error_percentage > 1
     ;

如果您先 trim 结果集,效率会更高,而且可能会更干净:

  SELECT agg.*
    FROM (
            SELECT date, ((CAST(error AS float) / CAST(success AS float)) *100) AS error_percentage
              FROM daily_report
         ) agg
   WHERE error_percentage > 1
ORDER BY error_percentage DESC
     ;

我只想用表达式替换 where

SELECT date,
       ((CAST(error AS float) / CAST(success AS float)) *100) AS error_percentage
FROM daily_report
WHERE error > 0.01 * success
ORDER BY error_percentage DESC;