SQL SELECT ステートメント: グループ化後の列エイリアスの使用
データベース操作では、多くの場合、SELECT
句に続く GROUP BY
式内で列の別名を使用する必要があります。 ただし、このコンテキストでエイリアスを直接使用すると、頻繁にエラーが発生します。
次の SQL クエリについて考えてみましょう:
<code class="language-sql">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, ROUND(avg_time * cnt, 2) as slowdown, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10;</code>
このクエリを実行すると、「avg_time」が未定義であることを示すエラーが発生する可能性があります。これは、データベースが SELECT
ステートメントを全体として処理するために発生します。エイリアスが同じステートメント内で使用できるほど早く定義されていません。
解決策にはサブクエリの使用が含まれます。これにより、外部クエリでエイリアスを定義し、アクセスできるようになります。 修正されたクエリは次のとおりです:
<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>
内部サブクエリはエイリアスを定義します。 外側のクエリは、これらの事前定義されたエイリアスを計算と選択に使用して、エラーを防ぎます。 このアプローチでは、サブクエリのスコープ内で作成されたエイリアスを参照することにより、グループ化された結果に基づいたデータ操作が可能になります。
以上がSQL SELECT ステートメントでグループ化した後に列のエイリアスを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。