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 は次の順序でクエリを実行します:
したがって、指定されたコードでは、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 サイトの他の関連記事を参照してください。