【发布时间】:2017-10-27 13:22:20
【问题描述】:
这样的问题: 表A包含一个列号用于记录收入,表B包含一个列号用于记录结果。
可能在一个实例中,表 A 记录 3,12,3,25,1,3,表 B 记录 23,1,4。你可以认为我得到了3,12,3,25,1,3的钱,花了23,1,4。
每次我花钱时,通常都会先取数字 3,然后再取 12 才能满足需求(本例中为 3、12、3、25,即 3+12+3+25>23+1+4>3+12 +3)
我想知道的是如何构造一个sql来查询剩下的收入?在上面的示例中,我将得到 25,1,3,是的,还包括 25。
// solution in java code level but no elegant
private List<Integer> example(List<Integer> aList, List<Integer> bList){
int sumB = bList.stream().reduce(0, Integer::sum);
List<Integer> res = new ArrayList<>();
int sumA = 0;
for (int a: aList){
sumA = sumA + a;
if (sumA>sumB) res.add(a);
}
return res;
}
【问题讨论】:
-
可以用纯sql以外的语言吗?
-
我尝试的是获取所有数据并在java代码级别比较这两列,它有效但不优雅,
-
所以请发布一些代码示例并解释为什么它不优雅/如何改进
-
我只是想在sql级别得到正确的结果,但我不知道如何构造这种sql
-
这在独立 sql 中听起来并不简单。某种迭代器可以做到这一点,但在 java 中处理结果要简单一百倍。