这是桌子T
:-
id num
-------
1 50
2 20
3 90
4 40
5 10
6 60
7 30
8 100
9 70
10 80
而下面是一个 虚构的 sql
select *
from T
where sum(num) = '150'
预期的结果是:-
(一种)
id num
-------
1 50
8 100
(B)
id num
-------
2 20
7 30
8 100
(C)
id num
-------
4 40
5 10
8 100
最喜欢’A’的情况!
我知道这种情况与组合有关。
在现实世界中-客户从商店获得商品,并且由于他与商店之间达成协议,他每个星期五都付款。例如,付款金额不是项目的确切总和:他得到5册50钪(=
250钪)的书,而星期五他带来了150册。所以前3本书非常匹配-3 * 50 = 150.我需要找到那三本书的编号!
任何帮助,将不胜感激!
您可以在MSSQL中使用递归查询来解决此问题。
[SQLFiddle demo](http://sqlfiddle.com/#!6/1b720/39)
第一个递归查询建立一个树的累积总和<=150。第二个递归查询获取叶子的累积总和=
150,并将所有这样的路径输出到其根。另外,在按排序的最终结果中,ItemsCount
您将首先获得首选的组(最少的项目数)。
WITH CTE as
( SELECT id,num,
id as Grp,
0 as parent,
num as CSum,
1 as cnt,
CAST(id as Varchar(MAX)) as path
from T where num<=150
UNION all
SELECT t.id,t.num,
CTE.Grp as Grp,
CTE.id as parent,
T.num+CTE.CSum as CSum,
CTE.cnt+1 as cnt,
CTE.path+','+CAST(t.id as Varchar(MAX)) as path
from T
JOIN CTE on T.num+CTE.CSum<=150
and CTE.id<T.id
),
BACK_CTE as
(select CTE.id,CTE.num,CTE.grp,
CTE.path ,CTE.cnt as cnt,
CTE.parent,CSum
from CTE where CTE.CSum=150
union all
select CTE.id,CTE.num,CTE.grp,
BACK_CTE.path,BACK_CTE.cnt,
CTE.parent,CTE.CSum
from CTE
JOIN BACK_CTE on CTE.id=BACK_CTE.parent
and CTE.Grp=BACK_CTE.Grp
and BACK_CTE.CSum-BACK_CTE.num=CTE.CSum
)
select id,NUM,path, cnt as ItemsCount from BACK_CTE order by cnt,path,Id
问题内容: 这是一张桌子… 我需要返回总数量等于或超过当前库存水平的最新行,一旦达到总数,就不包括任何其他行,因此我希望只看到这些行… 我假设我需要CTE(公用表表达式),并且已经看过这个问题,但是看不到如何将其转换为我的要求。 帮助!? 问题答案: 退货
问题内容: 我有一个表创建与: 我用这个插入数据: 当我从表中选择以下内容时: 这将返回2行 为什么会这样呢?为什么即使查询指定值仅是1,但没有空格,它也返回最后带有空格的版本? 问题答案: 有趣的是,如果您使用LIKE,则可以工作: 编辑: 经过更多的研究,我发现其他人与我们进行了相同的对话。看这里。该评论仅在讨论中进行了一半。但是结果是如我们所发现的,要么如上所述使用LIKE,要么添加第二个条
问题内容: 问题 在Pandas DataFrame中给定数据,如下所示: 我想选择所有是集合中几个值之一的行 题 在Pandas中执行此操作的有效方法是什么? 我看到的选项 遍历行,使用Python处理逻辑 选择并合并许多语句,如下所示 执行某种联接 这里的性能折衷是什么?一种解决方案何时比另一种更好?我缺少什么解决方案? 尽管上面的示例使用字符串,但我的实际工作是使用数百万行中10-100个整
在发电机表中,我希望通过选择属性值与一组值匹配的所有项来查询。例如,我的表具有current_status属性,因此我希望所有具有“新”或“ASSIGNED”值的项。如果我对current_status属性应用GSI,看起来我必须在两个查询中执行此操作?或者进行扫描?
问题内容: 我有一个交叉引用表: 我需要选择与 所有 标签集匹配的ID 。例如,如果给我标签,我将获得ID 。如果给我标签,我将不会获得任何ID,因为没有与 所有 标签匹配的ID 。 另外,如果为我提供了标签,那么我也不应该获得任何结果ID,因为搜索将得到一个值,因此没有ID与 所有 标签匹配。 最近两天我一直在拔头发。希望有人可以帮助我。 问题答案: 查询的想法是,您需要将记录数与子句中提供的值
问题内容: 这似乎很基本,但我无法弄清楚。 我有一个表“ item_tags”,我想选择所有与标签1和2匹配的项目(例如,每个项目都必须同时具有两个标签)。 我将如何在mysql中执行此操作? 创建表是: 谢谢! 问题答案: 使用: 您需要定义GROUP BY和HAVING子句,并且不同标签ID的数量必须等于您在IN子句中指定的标签数。