ホームページ > データベース > mysql チュートリアル > SQL SELECT ステートメントでグループ化した後に列のエイリアスを使用するにはどうすればよいですか?

SQL SELECT ステートメントでグループ化した後に列のエイリアスを使用するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-14 10:06:44
オリジナル
680 人が閲覧しました

How Can I Use Column Aliases After Grouping in SQL SELECT Statements?

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

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