不识别WHERE子句中的别名 [英] not recognizing alias in WHERE clause

查看:0
本文介绍了不识别WHERE子句中的别名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试查询以下信息。没有WHERE子句,查询就可以完美地执行;但是,当我添加WHERE子句时,我得到一个错误,别名"ERROR_PERCENTIAL"无法识别。我还尝试了使用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不受影响,因为(必须)在检索结果集之后进行排序。

使用

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
     ;

如果您先修剪结果集,效率会更高,也可能更干净:

  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子句中的别名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆