Database 如何在何处执行<;之前>;聚合函数(Postgres)

Database 如何在何处执行<;之前>;聚合函数(Postgres),database,postgresql,Database,Postgresql,从标题很难解释,但这是我的SQL: SELECT SUM("payments"."amount"), "invoices"."property_id" FROM "payments" JOIN "invoices" ON "payments"."invoice_id" = "invoices"."id" GROUP BY "property_id" 它返回特定属性(通过其发票连接)的所有付款记录(金额列)的总和 换言之: Property has_many: :invoices I

从标题很难解释,但这是我的SQL:

SELECT
  SUM("payments"."amount"),
  "invoices"."property_id"
FROM "payments"
JOIN "invoices"
  ON "payments"."invoice_id" = "invoices"."id"
GROUP BY "property_id"
它返回特定
属性
(通过其发票连接)的所有
付款
记录(
金额
列)的总和

换言之:

Property has_many: :invoices
Invoice has_one: :payment

虽然我试图在特定日期范围内选择付款,但必须在聚合函数“之前”进行(上面的精确查询也是如此,但仅适用于2017-01-01到2017-02-01)。该字段将在您正在查找的
WHERE
子句上的
生成。(
其中
在聚合之前执行;
have
在聚合之后执行。)PostgreSQL中建议的日期文字是ANSI标准的
日期“YYYY-MM-DD”
。日期范围通常使用>=开始日期和<结束日期+1进行检查(以便正确处理时间部分(如果有)

选择
总额(p.金额),
i、 物业编号
从付款p
在p.invoice\u id=i.id上加入发票i
其中,p.生成时间>=日期“2017-01-01”
在<日期'2017-02-02'时产生的p
按i.property\u id分组;

在聚合之前执行WHERE子句。真的吗。。。?我是摩罗尼人,我甚至没试过,我只是认为那不管用。。。啊!约会没有时间part@a_horse_with_no_name:您如何知道生成的\u at的数据类型?在任何地方都没有提到。
SELECT
  SUM(p.amount),
  i.property_id
FROM payments p
JOIN invoices i ON p.invoice_id = i.id
WHERE p.generated_at >= DATE '2017-01-01' 
  AND p.generated_at < DATE '2017-02-02'
GROUP BY i.property_id;