Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas utiliser d'alias de colonne dans la même instruction SELECT ?
Explication selon laquelle les alias de colonnes dans les requêtes SQL ne peuvent pas être réutilisés dans la même instruction SELECT
Dans la requête SQL donnée, essayez d'utiliser des alias de colonne (avg_time et cnt) dans une expression (ROUND(avg_time * cnt, 2)) après l'instruction SELECT. Cependant, cela génère une erreur car l'alias de colonne n'est pas accessible dans les expressions SELECT suivantes.
Cette limitation résulte de l'ordre dans lequel le moteur SQL traite les requêtes. L'instruction SELECT est exécutée en premier et des alias sont créés au cours de cette phase. Cependant, les expressions suivantes sont traitées ultérieurement, auquel cas l'alias n'est pas encore défini.
Solution : Utiliser la sous-requête
Pour contourner cette limitation, des sous-requêtes peuvent être utilisées. Une sous-requête est une requête distincte intégrée dans une autre requête. Dans ce cas, vous pouvez utiliser des sous-requêtes pour créer des alias, puis y accéder dans la requête externe.
La requête suivante utilise une sous-requête pour encapsuler la requête d'origine et rendre les alias de colonnes disponibles dans la couche externe :
<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>
Dans cette requête, la sous-requête (entre parenthèses) crée les alias de colonne stddev_time, max_time, avg_time, min_time et cnt. La requête externe sélectionne ensuite les colonnes de la sous-requête, y compris l'alias avg_time, qui est utilisé dans l'expression ROUND(avg_time * cnt, 2) sans rencontrer d'erreurs.
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!