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 SELECT
Aussagen. 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>
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!