PSQL:sum并不适用于字段

时间:2015-08-13 17:31:45

标签: sql postgresql

我有这个查询有效:

SELECT 
partners.name, 
roles.name, 
(SELECT count(*) FROM partner_member_bindings WHERE roles.id = partner_member_bindings.role_id AND verify_status != 'pending') AS Num_verifications,
CAST(roles.price_partner / 100 AS money) AS partner_price
FROM partners
JOIN roles ON roles.partner_id = partners.id
ORDER BY partners.name, roles.name

我想要的是显示一个额外的字段,显示" partner_price * Num_verifications"美元价值。我没做什么工作:

sum(Num_verifications * partner_price)返回Num_verification不存在。复制整个子查询(是的,我知道,但我只是测试)也不起作用。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

select中的字段只能包含输入列,并且在运行时会成为输出列。这就是为什么你不能在另一个列定义中使用计算列。

但是如果你想要SUM那意味着某种聚合。如果你想要字段乘法的总和,那通常不是每行完成的。或者你只需​​要乘法结果?这通常在表示层中完成。

如果你只需要乘法(因为没有GROUP BYSUM无论如何都可以)你可以将整个查询放入子查询并从中计算,将排序留在外面:< / p>

SELECT
partnername,
rolename,
Num_verifications,
partner_price,
partner_price*Num_verifications
FROM
  (SELECT 
   partners.name as partnername, 
   roles.name as rolename, 
   (SELECT count(*) FROM partner_member_bindings WHERE roles.id = partner_member_bindings.role_id AND verify_status != 'pending') AS Num_verifications,
   CAST(roles.price_partner / 100 AS money) AS partner_price
   FROM partners
   JOIN roles ON roles.partner_id = partners.id) temp
ORDER BY partners.name, roles.name