【问题标题】:How to find all combinations that equal a given sum?如何找到等于给定总和的所有组合?
【发布时间】:2019-06-10 10:23:36
【问题描述】:

在 SQL 中,我有一个事务类型列表和一个值。 下面是一个简单的例子。

|-----------|--------|
| Tran.Type | Value  | 
|-----------|--------|
|     04    |   10   |
|-----------|--------|
|     07    |   10   |
|-----------|--------|
|     04    |   5    |
|-----------|--------|
|     01    |   8    | 
|-----------|--------|



|-----------------|
| Current Balance |
|-----------------|
|        13       |
|-----------------|

目标是将值相加并得到数字 13。 在这个例子中很容易发现类型 07 是负数。 所以10-10+5+8=13

但是当交易数量达到 20 和 10 种不同的类型时,这是相当困难的。 值也有正负。

到目前为止,我想出了这个。

import itertools
numbers = list(map(int, input("Enter multiple values: ").split()))
expectedSum = int(input("Enter expected value: "))
result = [seq for i in range(len(numbers), 0, -1) for seq in 
itertools.combinations(numbers, i) if sum(seq) == expectedSum]
print (result)<code>    

知道如何将类型合并到结果部分吗?如果那个类型是相反的值?

【问题讨论】:

标签: python sum


【解决方案1】:

有几种方法可以做到这一点,通过在 SQL 语句中使用 CASE 或者如果您有一个非常大的列表,则根据事务类型引入一个包含 +1 或 -1 的字段,然后当您正在执行值乘以值,最后进行总和。例子,就在这里;

ALTER TABLE Tran ADD COLUMN tran_multiple INT default 1;

-- update each value as req.
UPDATE Tran set tran_multiple=-1 WHERE Tran.id = xxxx; 

SELECT sum (TranValue.Value * Tran.tran_multiple) as Val From TranValue 
    INNER JOIN Tran on TranValue.Type = Tran.Type 

在这里,我假设您的表 TranValue 存储值。当然,您可以在语句中使用 Group By 子句 GROUP BY Tran.type,以及在 SELECT 字段列表中使用 Tran.type(用于按 Tran.Type & Values 列出)。那么编写一个简单的代码应该不成问题。

不过,我会要求您不要在 SQL 中使用 VALUEVALUES,因为它与 RESERVED KEYWORDs 非常相似(只是一个建议

我没有将CASE 示例放在这里,因为您没有指定您使用的数据库(语法不同),而且您声称有大量类型。

如果你更喜欢编码而不是 SQL,那么同样可以通过定义一个字典来完成,其中每个 type 根据 type 持有 +1 或 -1,然后当用户输入值时,您可以将 type 相乘并完成。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多