「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 同じSelectステートメントの計算で直接列エイリアスを使用できないのはなぜですか?

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

2025-03-22に投稿されました
ブラウズ:877

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

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

特定のSQLクエリで、式 avg_time and で列エイリアスを使用しようとしています。 根本原因は、 select

ステートメントの計算順序です。プログラムは、

Select ステートメント全体を同時に処理するため、エイリアス値はその時点で認識できません。 ソリューション:ネストされたサブQueriesを使用

] この問題を解決するために、サブ征服を使用してクエリをカプセル化することができ、それにより効果的に中間データセットを作成できます。このサブクエリでは、必要な列エイリアス avg_time

および

cnt を作成できます。 Select stddev_time、max_time、avg_time、min_time、cnt、round(avg_time * cnt、2)select as slowdown から ( 選択します coalesce(round(stddev_samp(time)、2)、0)stddev_time、 max_timeとしてのmax(time)、 round(avg(time)、2)avg_time、 min_timeとしてのmin(time)、 cnt(path)as cnt、 パス から ロードタイム グループ パス 注文 AVG_TIME DESC 制限10 )x;

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;
ステートメントは、これらのエイリアスを正常に参照できます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3