Maison >base de données >tutoriel mysql >Comment puis-je utiliser des colonnes calculées dans la même requête dans PostgreSQL ?

Comment puis-je utiliser des colonnes calculées dans la même requête dans PostgreSQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-14 06:08:47442parcourir

How Can I Use Calculated Columns Within the Same Query in PostgreSQL?

PostgreSQL : utiliser efficacement les colonnes calculées dans une seule requête

PostgreSQL, un puissant système de gestion de bases de données relationnelles, offre de robustes capacités de manipulation de données. Cependant, l'utilisation de colonnes calculées dans une seule requête diffère de celle de certains autres systèmes de bases de données. Explorons cette nuance.

Considérez cette approche de type SQL, qui tente d'utiliser des colonnes calculées directement dans la requête principale :

<code class="language-sql">SELECT cost_1, quantity_1, cost_2, quantity_2, 
       (cost_1 * quantity_1) AS total_1,
       (cost_2 * quantity_2) AS total_2,
       (total_1 + total_2) AS total_3
FROM data;</code>

Cela échouera dans PostgreSQL. L'erreur se produit car total_1 et total_2 ne sont pas reconnus comme colonnes existantes au point où total_3 est calculé.

La solution consiste à utiliser une expression de table commune (CTE) ou une sous-requête pour rendre disponibles les colonnes calculées intermédiaires. Voici comment y parvenir à l'aide d'un CTE :

<code class="language-sql">WITH calculated_totals AS (
    SELECT cost_1, quantity_1, cost_2, quantity_2, 
           (cost_1 * quantity_1) AS total_1,
           (cost_2 * quantity_2) AS total_2
    FROM data
)
SELECT cost_1, quantity_1, cost_2, quantity_2, total_1, total_2, 
       (total_1 + total_2) AS total_3
FROM calculated_totals;</code>

Cette requête révisée définit d'abord un CTE, calculated_totals, qui calcule total_1 et total_2. La requête principale fait ensuite référence à ces colonnes calculées à partir du CTE pour calculer total_3. Cette approche garantit un calcul correct sans surcharge de performances. L'utilisation de CTE est généralement préférée pour la lisibilité et la maintenabilité des requêtes complexes. L'utilisation de CTE ou de sous-requêtes dans ce scénario n'a pas d'impact négatif sur les performances.

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