0
votes

Utilisez deux colonnes de sortie pour créer une troisième colonne de sortie avec SELECT

J'ai un SELECT qui calcule deux nombres pour chaque ligne, chacun étant une colonne. Je veux ensuite diviser les deux nombres et montrer ce résultat divisé dans une troisième colonne.

Je pense que cela devrait être assez simple (je suis assez inexpérimenté avec SQL) mais je n'ai rien pu trouver dessus - peut-être que je recherche avec les mauvais mots clés.

En d'autres termes, j'aimerais que le résultat soit quelque chose comme

SELECT "Col 1", "Col 2", "Col 1"/ "Col 2" as "Col 3" 
  FROM (SELECT (expr1) AS "Col 1", (expr2) as "Col 2")

Col 1 et Col ​​2 sont tous deux des calculs coûteux et Col ​​3 est simplement égal à Col ​​2 / Col 1 . P >

Naïvement, j'écrirais cette requête comme suit:

SELECT (expr1) AS "Col 1", (expr2) as "Col 2", (expr1 / expr2) as "Col 3"

Mais ici, les deux expressions expr1 et expr2 seraient évalué deux fois. Comment puis-je stocker temporairement les valeurs de expr1 et expr2 et les utiliser pour Col ​​3 ?

Edit: j'étais capable de le faire avec:

Col 1 | Col 2 | Col 3
---------------------
 1        2      0.5
 3        5      0.6

Est-ce la bonne façon de procéder?


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser un CTE:

WITH CTE AS (
  SELECT (expr1) AS "Col 1", (expr2) as "Col 2"
  FROM ...
)
SELECT "Col 1", "Col 2", "Col 1" / "Col 2" AS "Col 3"
FROM CTE


0 commentaires

1
votes

Utilisez un cte et cela devrait vous aider à travailler

with cte as
(...(expr1) AS "Col 1", (expr2) as "Col 2 ... )
select "Col 1", "Col 2", ("Col 1" / "Col 2") as "Col 3" from cte


0 commentaires

1
votes

Une belle méthode consiste à utiliser une jointure latérale:

SELECT v.col1, v.col2, (v.expr1 / v.expr2) as col3
FROM T CROSS JOIN LATERAL
     (VALUES (expr1, expr2)) v(col1, col2);


0 commentaires