对所选项目的操作

时间:2013-05-13 09:19:34

标签: sql postgresql select

我想要这样的查询:

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 个答案:

答案 0 :(得分: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进行更多计算时才会大大扩展此查询,我才推荐使用子查询方法。不是因为它更好,而是因为它更容易阅读。但如果您只需要当前计算,请不要打扰子查询。它实际上不太容易阅读。

答案 1 :(得分: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没有办法直接根据之前的选择字段进行操作

答案 2 :(得分:0)

不,并且过于不必要使用子选择,只需再次使用SUM(data_parts.size)

答案 3 :(得分: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';