【发布时间】:2018-05-23 15:38:08
【问题描述】:
我在 Postgres 中有如下数据结构:
捐款
id amount status
1 5000 OK
2 7500 OK
捐赠物品
id donationId amount includeInTotals
1 1 2500 false
2 1 2500 false
3 2 7500 false
在伪 SQL 中,我正在尝试执行以下操作:
SELECT * FROM donations
WHERE SUM(SELECT donation.items WHERE "donationId" = "donations"."id"
AND "includeInTotals" = false) >= "donations"."amount"
本质上是要删除“includeInTotals = false”捐赠项目的总数与捐赠价值相同的捐赠。
这是我目前为 Sequelize 获得的代码:
Models.donations.findAndCountAll({
where: { status: 'OK' },
include: {
model: Models.donation_items,
as: 'items',
duplicating: false,
},
having: sequelize.literal('COALESCE(SUM(CASE WHEN "items"."includeInTotals" = false THEN items.amount ELSE 0 END), 0) < "donations"."amount"'),
group: ['"donations.id"', '"items.id"']
});
这适用于 donation ID: 2 - 它不是由查询返回的,但 donation ID: 1 是,尽管两个金额等于 5000。
我对 SUM 有什么问题吗?
【问题讨论】:
标签: node.js postgresql sequelize.js