ホームページ >データベース >mysql チュートリアル >SQL HAVING 句で集計エイリアスを使用できないのはなぜですか?

SQL HAVING 句で集計エイリアスを使用できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 00:32:16637ブラウズ

Why Can't I Use an Aggregate Alias in a SQL HAVING Clause?

HAVING 句で集計エイリアスを使用できないのはなぜですか?

次の SQL ステートメントを考えてみましょう:

select col1,count(col2) as col7
from --some join operation
group by col1
having col7 >= 3 -- replace col7 by count(col2) to make the code work

このコードは、「col7」が無効な列名であることを示すエラーを生成します。なぜそうなるのでしょうか?

その理由は SQL ステートメントの実行順序にあります。 HAVING 句は SELECT 句の前に評価されます。これは、HAVING 句が評価されるとき、集計関数 count(col2) のエイリアス "col7" がまだ定義されていないことを意味します。

SQL は次の順序でクエリを実行します:

  1. FROM 句で指定されたすべてのテーブルのデカルト積を計算します。
  2. WHERE に基づいて行をフィルタリングします。
  3. GROUP BY 句に基づいて行をグループ化します。
  4. HAVING 句に基づいてグループをフィルタリングします。
  5. SELECT 句のターゲット リスト内の式を評価します。
  6. DISTINCT が指定されている場合は重複行を削除します
  7. 副選択が存在する場合はユニオンを実行します。
  8. ORDER BY 句に基づいて行を並べ替えます。
  9. 存在する場合は TOP 句を適用します。

したがって、指定されたコードでは、HAVING 句はエイリアスを使用しようとします。 SELECT 句で定義される前の「col7」。この問題を解決するには、「col7」を集計関数自体に置き換えます。

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3

これにより、HAVING 句がcol2 の集計数を正しく評価できるようになります。

以上がSQL HAVING 句で集計エイリアスを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。