选择查询的计算字段中的错误

时间:2012-06-23 14:55:34

标签: mysql sql

此查询给出了错误#1054 - 未知列' totalamount'在' where子句'

 SELECT (amount1 + amount2) as totalamount 
 FROM `Donation` 
 WHERE totalamount > 1000

我知道我可以通过使用group by子句来解决这个错误,并用having子句替换where where条件。但除了使用having子句之外还有其他任何解决方案。如果group by是唯一的解决方案,那么我想知道为什么我必须使用group by子句,即使我没有使用任何聚合函数

感谢。

4 个答案:

答案 0 :(得分:3)

我不希望MySQL提供该错误消息,但许多其他数据库都这样做。在其他数据库中,您可以通过重复列定义来解决它:

SELECT  amount1 + amount2 as totalamount 
FROM    Donation
WHERE   amount1 + amount2 > 1000

或者您可以使用子查询来避免重复:

SELECT  totalamount 
FROM    (
        select  amount1 + amount2 as totalamount
        ,       *
        from    Donation
        ) as SubQueryAlias
WHERE   totalamount  > 1000

Live example at SQL Fiddle.

答案 1 :(得分:1)

没办法。

WHERE 过滤列,而 HAVING 过滤聚合。

请参阅SQL Having

答案 2 :(得分:1)

根据SQL方言,您不能将派生列放在where子句中。

而是使用where where子句。

WHERE (amount1 + amount2) > 1000

答案 3 :(得分:1)

我建议您使用Andomar答案中的一种变体。

MySQL允许这样做(不要使用它,它不是标准的,几乎任何其他DBMS都不允许):

SELECT (amount1 + amount2) AS totalamount 
  FROM Donation 
  HAVING totalamount > 1000 ;