我想要这样的查询:
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
作为参数?
答案 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';