1

このクエリでエラー #1054 - 'where 句' の列 'totalamount' が不明です

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

group by 句を使用してこのエラーを解決し、where 条件を having 句に置き換えることができることはわかっています。しかし、having 句を使用する以外に他の解決策はありますか。group by が唯一の解決策である場合、集計関数を使用していなくても group by 句を使用する必要がある理由を知りたい

ありがとう。

4

4 に答える 4

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

SQL Fiddle での実例。

于 2012-06-23T15:02:10.120 に答える
1

とんでもない。

集計に対してHAVINGフィルターを使用しているときに、 WHERE列をフィルター処理します。

SQL を持つを参照してください。

于 2012-06-23T14:58:46.753 に答える
1

SQL 方言によっては、派生列を where 句に入れることができません。

代わりに、この where 句を使用してください。

WHERE (amount1 + amount2) > 1000
于 2012-06-23T15:03:25.310 に答える
1

Andomar の回答のバリエーションの 1 つを使用することをお勧めします。

MySQL で許可されているのは次のとおりです (使用しないでください。これは標準ではなく、他のほとんどの DBMS では許可されていません)。

SELECT (amount1 + amount2) AS totalamount 
  FROM Donation 
  HAVING totalamount > 1000 ;
于 2012-06-23T15:11:07.457 に答える