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

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

DDD
Freigeben: 2025-01-14 09:28:43
Original
503 Leute haben es durchsucht

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

Einschränkungen bei der direkten Verwendung von Spaltenaliasen für Berechnungen in SQL-Abfragen

In der angegebenen SQL-Abfrage führt der Versuch, die Spaltenaliase ROUND(avg_time * cnt, 2) und avg_time im Ausdruck cnt zu verwenden, zu der Fehlermeldung „Spalte ‚avg_time‘ existiert nicht“.

Die Ursache liegt in der Reihenfolge der Bewertung der SELECTAussagen. Das Programm verarbeitet die gesamte SELECT-Anweisung gleichzeitig, sodass der Aliaswert zu diesem Zeitpunkt nicht erkannt werden kann.

Lösung: Verschachtelte Unterabfragen verwenden

Um dieses Problem zu lösen, kann die Abfrage mithilfe einer Unterabfrage gekapselt werden, wodurch effektiv ein Zwischendatensatz erstellt wird. In dieser Unterabfrage können Sie die erforderlichen Spaltenaliase avg_time und cnt erstellen.

<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

Beim Ausführen dieser Abfrage wird nun zuerst die Unterabfrage ausgewertet, wodurch ein Datensatz mit den erforderlichen Spaltenaliasen erstellt wird. Nachfolgende SELECT-Anweisungen können dann erfolgreich auf diese Aliase verweisen.

Das obige ist der detaillierte Inhalt vonWarum kann ich Spaltenaliase nicht direkt in den Berechnungen 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage