2011-02-14 76 views
0

一个具有查询与总和

id desc total 
1 baskets 25 
2 baskets 15 
3 baskets 75 
4 noodles 10 

表我想询问与输出,总的总和为40查询??

输出,如:

id desc total 
1 baskets 25 
2 baskets 15 
+1

但`baskets`总数的总和为115.包含`total = 75`的行会发生什么? – BoltClock 2011-02-14 05:21:38

+1

您如何获得该输出(仅限2行,没有总和)? – 2011-02-14 05:22:28

+0

您使用的是什么RDBMS? – 2011-02-14 05:24:51

回答

1

不太清楚你想要什么,但是这可能让你开始

SELECT `desc`, SUM(Total) Total 
FROM TableName 
GROUP BY `desc` 
HAVING SUM(Total) = 40 
1

我相信这将让你你正在寻找的结果列表但不能与您的示例数据集一起使用,因为示例数据集中的任何内容都不能提供总数为40.

SELECT id, desc, total 
FROM mytable 
WHERE desc IN (
    SELECT desc 
    FROM mytable 
    GROUP BY desc 
    HAVING SUM(total) = 40 
) 
0
select desc 
from (select desc, sum(total) as ct group by desc) 
1
Select Desc,SUM(Total) as SumTotal 
from Table 
group by desc 
having SUM(Total) > = 40 
1

从阅读你的问题,它听起来像你想要一个查询,返回代表某个目标值和具有相同描述的总和的任何子集。

有没有简单的方法来做到这一点。这迁移到算法领域。

假设我是正确的在你之后,分组和bys聚合函数不会解决你的问题。 SQL不能指示应该对数据子集执行查询,直到它耗尽所有可能的排列并找到符合要求的总和。

你将不得不混合一个算法到你的SQL ...即存储过程。

或者简单地从数据库中获取符合desc的所有数据,然后在代码中对其执行算法。

我记得有一个CS算法类我把在那里,这是一个已知的问题:

我相信你可以只适应工作这一算法的版本来解决问题

http://en.wikipedia.org/wiki/Subset_sum_problem