怎么办WHERE <before>一个聚合函数(Postgres)

时间:2017-02-09 20:00:39

标签: database postgresql

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

SELECT
  SUM("payments"."amount"),
  "invoices"."property_id"
FROM "payments"
JOIN "invoices"
  ON "payments"."invoice_id" = "invoices"."id"
GROUP BY "property_id"

它返回特定Payment(通过其发票连接)的所有amount记录(Property列)的总和。

换句话说:

Property has_many: :invoices
Invoice has_one: :payment

我正在尝试在特定日期范围之间选择付款,但必须在聚合函数“之前”发生(所以上面的确切查询也是如此,但仅适用于2017-01-01至2017-02-01 )。该字段在generated_at

上为Payment

1 个答案:

答案 0 :(得分:0)

您正在寻找WHERE条款。 (WHERE在聚合之前执行; HAVING在执行之后执行。)PostgreSQL中的建议日期文字是ANSI标准DATE 'YYYY-MM-DD'。通常使用&gt; =开始日和&lt;来检查日期范围。结束日+ 1(为了正确处理时间部分,如果有的话)。

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;