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
verwendenUm 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>
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!