0

我想要这样的查询:

SELECT 
  sum(data_parts.size) as size_sum,
  (size_sum/2.) as half_of_size_sum
FROM 
  data_parts
WHERE
  data_parts.some_id='1';

当然它不会起作用,因为没有名为 的列size_sum,所以我的问题是:

有没有办法size_sum在下一个选择项中用作参数?

4

4 回答 4

2

除了使用包含您当前查询的子查询(请参阅 Davide 的回答)之外,我认为没有办法做到这一点。

但你总是可以这样做:

SELECT 
  sum(data_parts.size) as size_sum,
  (sum(data_parts.size)/2.) as half_of_size_sum
FROM 
  data_parts
WHERE
  data_parts.id='1';

Postgres 足够聪明,只能得到一次。只有当这个查询会随着更多的计算而被大大扩展时,size_sum我才会推荐子查询方法。不是因为它工作得更好,而是因为它更容易阅读。但是,如果当前的计算是你所需要的,不要打扰子查询。它实际上不太容易阅读。

于 2013-05-13T09:24:02.143 回答
1

是的,使查询运行的(有点)丑陋的方式是......

SELECT 
     SIZE_SUM,
     SIZE_SUM/2 AS HALF_OF_SIZE_SUM
  FROM (
      SELECT 
         sum(data_parts.size) as size_sum) 
      FROM 
        data_parts
      WHERE
      data_parts.id='1') X;

但是我认为postgre上没有办法直接根据前面的select字段进行操作

于 2013-05-13T09:23:48.827 回答
0

不,为此使用子选择太不必要了,只需SUM(data_parts.size)再次使用即可。

于 2013-05-13T09:24:13.190 回答
0

我不确定我是否明白你的意思。你想要这样的代码吗?

SELECT 
  sum(data_parts.size) as size_sum,
  (sum(data_parts.size)/2.) as half_of_size_sum
FROM 
  data_parts
WHERE
  data_parts.some_id='1';
于 2013-05-13T09:24:58.410 回答