4

次のような SQL ステートメントがあります。

SELECT COUNT(*) AS foo, SUM(foo) AS foo_sum FROM bar

しかし、foo は別名であるため、MySQL はこれを許可しません。これを SQL で実現する方法を知っている人はいますか?

4

4 に答える 4

5

いいえ、select-list または WHERE 句でエイリアスを使用することはできません。エイリアスは、GROUP BY、HAVING、または ORDER BY でのみ使用できます。

サブクエリで定義されたエイリアスを使用することもできます。

SELECT foo, SUM(foo) AS foo_sum
FROM (
  SELECT COUNT(*) AS foo
  FROM bar
);
于 2008-12-16T22:27:23.290 に答える
1
SELECT SUM(foo) as foo_sum
FROM 
(
    SELECT COUNT(*) AS foo
    FROM bar
    GROUP BY baz
)
于 2008-12-16T22:22:45.763 に答える
0

私はそれは良い考えではないと思います。大きなクエリを作成する場合は、サブクエリなしで実行することをお勧めします。COUNT(*)必要に応じて、エイリアスなしでより大きな関数を使用してください。

エイリアスとサブクエリを使用してクエリを作成しました。約1時間かかりました!次に、エイリアスなしでクエリを再現しました。約45分に短縮されました。この状況では、サブクエリを忘れてください。難しくなくきれいですが、クエリが遅くなります。

于 2010-08-16T13:27:22.103 に答える
0

あなたが何をしようとしているのかわかりませんが、上記のソリューションでは、効率的ではないエイリアス テーブルでサブクエリを実行しています。

SELECT foo 
FROM (SELECT COUNT(*) AS foo FROM employees) AS T;

基本的に T はエイリアステーブルであり、単一レコードである count を持つ foo 列を返します。単一レコードであるため、SUM(foo) 関数を使用する意味はありません。

とにかく簡単な答え:

SELECT Count(1) AS foo from employees;

COUNT 関数は、どの NOT NULL フィールドを COUNT 関数のパラメーターとして (つまり、括弧内に) 含めても同じ結果を返すため、COUNT(1) を使用してパフォーマンスを向上させることができます。これで、データベース エンジンはデータ フィールドをフェッチする必要がなくなり、代わりに整数値 1 を取得するだけになります。

于 2017-11-24T11:04:46.217 に答える