Maison > base de données > tutoriel mysql > Pourquoi ne puis-je pas utiliser les alias de colonnes directement dans les calculs de la même instruction SELECT ?

Pourquoi ne puis-je pas utiliser les alias de colonnes directement dans les calculs de la même instruction SELECT ?

DDD
Libérer: 2025-01-14 09:28:43
original
504 Les gens l'ont consulté

Why Can't I Use Column Aliases Directly in the Same SELECT Statement's Calculations?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal