SQL クエリの計算に列エイリアスを直接使用する場合の制限
指定された SQL クエリで、式 ROUND(avg_time * cnt, 2)
で列エイリアス avg_time
と cnt
を使用しようとすると、「列 'avg_time' が存在しません」というエラーが発生します。
根本的な原因は、SELECT
ステートメントの評価順序にあります。プログラムは SELECT
ステートメント全体を同時に処理するため、その時点ではエイリアス値を認識できません。
解決策: ネストされたサブクエリを使用します
この問題を解決するには、サブクエリを使用してクエリをカプセル化し、中間データ セットを効果的に作成します。このサブクエリでは、必要な列のエイリアス avg_time
と cnt
を作成できます。
<code class="language-sql">SELECT stddev_time, max_time, avg_time, min_time, cnt, ROUND(avg_time * cnt, 2) as slowdown FROM ( SELECT COALESCE(ROUND(stddev_samp(time), 2), 0) as stddev_time, MAX(time) as max_time, ROUND(AVG(time), 2) as avg_time, MIN(time) as min_time, COUNT(path) as cnt, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10 ) X;</code>
このクエリを実行すると、最初にサブクエリが評価され、必要な列のエイリアスを含むデータセットが生成されます。後続の SELECT
ステートメントは、これらのエイリアスを正常に参照できるようになります。
以上が同じ SELECT ステートメントの計算で列のエイリアスを直接使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。