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

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

Linda Hamilton
リリース: 2025-01-14 08:16:43
オリジナル
672 人が閲覧しました

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

SQL クエリ内の列の別名は同じ SELECT ステートメント内で再利用できないという説明

指定された SQL クエリで、SELECT ステートメントの後の式 (ROUND(avg_time * cnt, 2)) で列のエイリアス (avg_time と cnt) を使用してみます。ただし、後続の SELECT 式では列の別名にアクセスできないため、エラーがスローされます。

この制限は、SQL エンジンがクエリを処理する順序から発生します。最初に 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>
ログイン後にコピー

このクエリでは、サブクエリ (かっこ内) によって列のエイリアス stddev_time、max_time、avg_time、min_time、および cnt が作成されます。次に、外側のクエリは、エラーが発生することなく、式 ROUND(avg_time * cnt, 2) で使用される別名 avg_time を含む列をサブクエリから選択します。

以上が同じ SELECT ステートメント内で列のエイリアスを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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