在postgresql

时间:2018-06-19 23:40:54

标签: sql postgresql

在我的postgresql表中,有四列inc_idexpense_grpmoneyyearMoney是1或-1。

inc_id expense_grp money year
100 grocery 1 2017
200 food -1 2017
300 grocery -1 2018
400 food 1 2018
500 grocery -1 2017
600 food 1 2017
700 grocery -1 2018
800 food 1 2018
900 cloths 1 2018
1000 food -1 2018

现在,我们需要找到特定moneyexpense_grp的{​​{1}}的总和。

例如,

Ex 1:-

yearmoney expense_grp的{​​{1}}等于(1 +(-1))= 0

Ex 2:-

groceryyearmoney expense_grp的总和是((-1)+(-1))= -2

现在,由于sum等于0,所以Ex 1处于平衡状态,但是由于sum等于-2,Ex 2没有处于平衡状态。如果要使Ex 2保持平衡,则必须从TABLE中删除这两个条目。为了使其平衡,我们必须使总和为0或删除条目。

并非总是需要删除所有条目。假设如果sum((-1)+ 1 +(-1))= -1,那么我们可以用-1删除条目,因此目标是使sum为0。带有-1的两个条目,因此我们可以按任意顺序删除。我们可以随机选择一个-1并将其删除。

我正在寻找两个解决方案查询,例如

grocery仅显示year中总和不平衡的SELECT * FROM dataset (solution query will be added here)的条目。

它应该返回,

expense_grp

year将显示经过删除操作后的平衡数据。

inc_id expense_grp money year
300 grocery -1 2018
400 food 1 2018
700 grocery -1 2018
800 food 1 2018
900 cloths 1 2018
1000 food -1 2018

注意:-我们已删除条目SELECT * FROM dataset (solution query will be added here)以使inc_id expense_grp money year 100 grocery 1 2017 200 food -1 2017 400 food 1 2018 500 grocery -1 2017 600 food 1 2017 900 cloths 1 2018 1000 food -1 2018 800 food 1 2018中的expense_grp food保持平衡。

还从表中删除了year2018,因为Sum为-2。

我们在这里必须考虑的一件事是,在删除一行之前,我们必须查看是否可以将其添加到任何其他不平衡的300 grocery -1 2018中以使其在同一700 grocery -1 2018中保持平衡。

所以基本上我想要的是找到年和费用组的所有组合,其中总金额!= 0删除导致“不平衡”的任意记录,直到总金额== 0

实现此目标的推荐方法是什么?

0 个答案:

没有答案