Restrictions relatives à l'utilisation directe des alias de colonnes pour les calculs dans les requêtes SQL
Dans la requête SQL donnée, essayer d'utiliser les alias de colonne ROUND(avg_time * cnt, 2)
et avg_time
dans l'expression cnt
entraîne l'erreur "La colonne 'avg_time' n'existe pas".
La cause fondamentale réside dans l'ordre d'évaluation des SELECT
déclarations. Le programme traite l'intégralité de l'instruction SELECT
simultanément, de sorte que la valeur de l'alias ne peut pas être reconnue à ce moment-là.
Solution : Utiliser des sous-requêtes imbriquées
Pour résoudre ce problème, la requête peut être encapsulée à l'aide d'une sous-requête, créant ainsi un ensemble de données intermédiaire. Dans cette sous-requête, vous pouvez créer les alias de colonnes requis avg_time
et cnt
.
<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>
Désormais, lors de l'exécution de cette requête, la sous-requête est évaluée en premier, produisant un ensemble de données contenant les alias de colonnes requis. Les instructions SELECT
suivantes peuvent alors faire référence avec succès à ces alias.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!