Heim > Datenbank > MySQL-Tutorial > Warum kann ich Spaltenaliase nicht in derselben SELECT-Anweisung verwenden?

Warum kann ich Spaltenaliase nicht in derselben SELECT-Anweisung verwenden?

Linda Hamilton
Freigeben: 2025-01-14 08:16:43
Original
672 Leute haben es durchsucht

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

Erklärung, dass Spaltenaliase in SQL-Abfragen nicht in derselben SELECT-Anweisung wiederverwendet werden können

Versuchen Sie in der angegebenen SQL-Abfrage, Spaltenaliase (avg_time und cnt) in einem Ausdruck (ROUND(avg_time * cnt, 2)) nach der SELECT-Anweisung zu verwenden. Dies löst jedoch einen Fehler aus, da auf den Spaltenalias in nachfolgenden SELECT-Ausdrücken nicht zugegriffen werden kann.

Diese Einschränkung ergibt sich aus der Reihenfolge, in der die SQL-Engine Abfragen verarbeitet. Die SELECT-Anweisung wird zuerst ausgeführt und in dieser Phase werden Aliase erstellt. Nachfolgende Ausdrücke werden jedoch später verarbeitet, wobei der Alias ​​zu diesem Zeitpunkt noch nicht definiert ist.

Lösung: Unterabfrage

verwenden

Um diese Einschränkung zu umgehen, können Unterabfragen verwendet werden. Eine Unterabfrage ist eine separate Abfrage, die in eine andere Abfrage eingebettet ist. In diesem Fall können Sie Unterabfragen verwenden, um Aliase zu erstellen und dann in der äußeren Abfrage darauf zuzugreifen.

Die folgende Abfrage verwendet eine Unterabfrage, um die ursprüngliche Abfrage zu kapseln und Spaltenaliase in der äußeren Ebene verfügbar zu machen:

<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>
Nach dem Login kopieren

In dieser Abfrage erstellt die Unterabfrage (in Klammern) die Spaltenaliase stddev_time, max_time, avg_time, min_time und cnt. Die äußere Abfrage wählt dann Spalten aus der Unterabfrage aus, einschließlich des Alias ​​avg_time, der im Ausdruck ROUND(avg_time * cnt, 2) verwendet wird, ohne dass Fehler auftreten.

Das obige ist der detaillierte Inhalt vonWarum kann ich Spaltenaliase nicht in derselben SELECT-Anweisung verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage