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

同じ SQL SELECT ステートメント内の後続の式で列のエイリアスを使用できますか?

Susan Sarandon
リリース: 2025-01-14 09:31:42
オリジナル
144 人が閲覧しました

Can I Use Column Aliases in Subsequent Expressions Within the Same SQL SELECT Statement?

後続の式の SQL SELECT ステートメントでの列エイリアスの使用

SQL では、同じ SELECT ステートメントの後続の式で列の別名を使用したい場合があります。ただし、これを実行しようとすると、質問で説明されているものと同様のエラーが発生する可能性があります。

この制限の理由は、SELECT ステートメントが評価されるときに列の別名が一緒に処理されるためです。したがって、同じ SELECT ステートメント内では別名を使用できません。

解決策: クエリをサブクエリにカプセル化します

この問題を解決するには、元のクエリをサブクエリにカプセル化します。これにより、列エイリアスをサブクエリの外部で使用できる新しいスコープが作成されます。

式 ROUND(avg_time * cnt, 2) で列エイリアス 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 ステートメントでエイリアスを使用でき、式 ROUND(avg_time * cnt, 2) を正常に評価できるようになります。

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

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