ホームページ > データベース > mysql チュートリアル > 同じ SELECT ステートメントの計算で列のエイリアスを直接使用できないのはなぜですか?

同じ SELECT ステートメントの計算で列のエイリアスを直接使用できないのはなぜですか?

DDD
リリース: 2025-01-14 09:28:43
オリジナル
503 人が閲覧しました

Why Can't I Use Column Aliases Directly in the Same SELECT Statement's Calculations?

SQL クエリの計算に列エイリアスを直接使用する場合の制限

指定された SQL クエリで、式 ROUND(avg_time * cnt, 2) で列エイリアス avg_timecnt を使用しようとすると、「列 'avg_time' が存在しません」というエラーが発生します。

根本的な原因は、SELECT ステートメントの評価順序にあります。プログラムは SELECT ステートメント全体を同時に処理するため、その時点ではエイリアス値を認識できません。

解決策: ネストされたサブクエリを使用します

この問題を解決するには、サブクエリを使用してクエリをカプセル化し、中間データ セットを効果的に作成します。このサブクエリでは、必要な列のエイリアス avg_timecnt を作成できます。

<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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート