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!