我想要这样的查询:
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
在下一个选择项中用作参数?
我想要这样的查询:
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
在下一个选择项中用作参数?
除了使用包含您当前查询的子查询(请参阅 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
我才会推荐子查询方法。不是因为它工作得更好,而是因为它更容易阅读。但是,如果当前的计算是你所需要的,不要打扰子查询。它实际上不太容易阅读。
是的,使查询运行的(有点)丑陋的方式是......
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字段进行操作
不,为此使用子选择太不必要了,只需SUM(data_parts.size)
再次使用即可。
我不确定我是否明白你的意思。你想要这样的代码吗?
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';