Maison >base de données >tutoriel mysql >Comment puis-je utiliser les alias de colonnes après le regroupement dans les instructions SQL SELECT ?
Instructions SQL SELECT : utilisation des alias de colonnes après le regroupement
Les opérations de base de données nécessitent souvent l'utilisation d'alias de colonne dans les expressions SELECT
suivant une clause GROUP BY
. Cependant, l'emploi direct d'alias dans ce contexte conduit fréquemment à des erreurs.
Considérez cette requête SQL :
<code class="language-sql">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, ROUND(avg_time * cnt, 2) as slowdown, path FROM loadtime GROUP BY path ORDER BY avg_time DESC LIMIT 10;</code>
L'exécution de cette requête peut produire une erreur indiquant que "avg_time" n'est pas défini. Cela se produit parce que la base de données traite l'instruction SELECT
dans son ensemble ; l'alias n'est pas défini suffisamment tôt pour être utilisé dans la même instruction.
La solution consiste à utiliser une sous-requête. Cela permet à l'alias d'être défini et accessible dans la requête externe. Voici la requête corrigée :
<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>
La sous-requête interne définit les alias. La requête externe utilise ensuite ces alias prédéfinis pour les calculs et la sélection, évitant ainsi l'erreur. Cette approche permet la manipulation de données basée sur des résultats groupés en référençant les alias créés dans le cadre de la sous-requête.
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!