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

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

Linda Hamilton
Linda Hamiltonoriginal
2025-01-14 07:29:47622parcourir

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

Utilisation de colonnes calculées dans la même requête dans PostgreSQL

PostgreSQL n'autorise pas les calculs utilisant des alias directement dans la même instruction SELECT. Par exemple, l'instruction SQL suivante signalera une erreur :

<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>

En effet, lorsque PostgreSQL calcule total_3, total_1 et total_2 n'ont pas encore été définis.

La solution est d'utiliser une sous-requête (table dérivée) :

<code class="language-sql">SELECT cost_1,
       quantity_1,
       cost_2,
       quantity_2,
       total_1 + total_2 AS total_3
FROM (
    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
) t;</code>

En créant la sous-requête t, nous définissons total_1 et total_2 comme colonnes disponibles dans l'instruction SELECT externe. Il n’y a aucune pénalité de performance avec cette approche. La requête externe fait référence à l'ensemble de résultats de la requête interne afin que total_3 puisse être calculé correctement.

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