Postgres中针对计算值的列别名

6

我尝试在这个查询中使用Postgres的别名,但Postgres停止并抱怨错误:列"subtotal"不存在

SELECT SUM(price) AS subtotal, 
       subtotal * 3.0 AS fees,
       (subtotal + fees) AS total
  FROM cart

您不能将别名作为下一列的一部分使用吗?
2个回答

7

不可以在同一条SQL语句中重复使用列别名 - 使用以下方法:

SELECT SUM(t.price) AS subtotal,
       SUM(t.price) * 3.0 AS fees,
       SUM(t.price + fees) AS total
  FROM CART t

您可以在ORDER BY子句中引用列别名,一些数据库也支持在GROUP BY和HAVING子句中进行引用。


1
关于您的答案的问题:
    SELECT SUM(t.price) AS subtotal,
      SUM(t.price) * 3.0 AS fees,
      SUM(t.price + fees) AS total
    FROM CART t

如果在同一个SQL语句中无法重复使用列别名,那么不应该是以下内容吗:
   SELECT SUM(t.price) AS subtotal,
     SUM(t.price) * 3.0 AS fees,
     SUM(t.price + (t.price * 3.0)) AS total
   FROM CART t

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接