Maison >base de données >tutoriel mysql >Comment puis-je utiliser les alias de colonnes après le regroupement dans les instructions SQL SELECT ?

Comment puis-je utiliser les alias de colonnes après le regroupement dans les instructions SQL SELECT ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-14 10:06:44675parcourir

How Can I Use Column Aliases After Grouping in SQL SELECT Statements?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn