在我的postgresql
表中,有四列inc_id
,expense_grp
,money
,year
。 Money
是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
现在,我们需要找到特定money
中expense_grp
的{{1}}的总和。
例如,
Ex 1:-
year
中money
expense_grp
的{{1}}等于(1 +(-1))= 0
Ex 2:-
grocery
在year
中money
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
保持平衡。
还从表中删除了year
和2018
,因为Sum为-2。
我们在这里必须考虑的一件事是,在删除一行之前,我们必须查看是否可以将其添加到任何其他不平衡的300 grocery -1 2018
中以使其在同一700 grocery -1 2018
中保持平衡。
所以基本上我想要的是找到年和费用组的所有组合,其中总金额!= 0删除导致“不平衡”的任意记录,直到总金额== 0
实现此目标的推荐方法是什么?