Sql 如何获取求和的前N行≥ X?
我有一张桌子: 产品SID,重量,过期。。。 我想得到N个过期的第一批产品是假的,重量之和是表格示例>=5kg 我该如何进行此查询 非常感谢 编辑:我的问题似乎不是很清楚。例如,我可以使用以下产品: p1:ID=1,重量=1; p2:ID=2,重量=1; p3:ID=3,重量=1; p4:ID=4,重量=2; 例如,我想得到前N个乘积,其权重之和为3。顺序是一样的 我想得到,比如p1,p2和p3,因为权重之和是3,在这种情况下,N是3,因为我需要3个乘积,所以它是正确的。我可以得到p1和p4,在这种情况下是正确的,因为我只需要两个乘积,或者p2和p4。。。等等Sql 如何获取求和的前N行≥ X?,sql,sql-server,Sql,Sql Server,我有一张桌子: 产品SID,重量,过期。。。 我想得到N个过期的第一批产品是假的,重量之和是表格示例>=5kg 我该如何进行此查询 非常感谢 编辑:我的问题似乎不是很清楚。例如,我可以使用以下产品: p1:ID=1,重量=1; p2:ID=2,重量=1; p3:ID=3,重量=1; p4:ID=4,重量=2; 例如,我想得到前N个乘积,其权重之和为3。顺序是一样的 我想得到,比如p1,p2和p3,因为权重之和是3,在这种情况下,N是3,因为我需要3个乘积,所以它是正确的。我可以得到p1和p4,在
SELECT TOP 10 p.*
FROM Prodcts p
WHERE p.expired = 0
AND p.weight >= 5
但是,目前还不清楚如何对单个记录求和。要按列/表达式筛选数据,需要使用WHERE子句。例如:
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
HAVING SUM(something) > 100
为了按聚合表达式筛选数据,需要使用HAVING子句。例如:
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
SELECT *
FROM DataSource
WHERE column = 0 -- or column = 'false'
HAVING SUM(something) > 100
为了获得某项内容的顶级记录,您应该使用适当的order BY子句——您需要对数据进行排序,以便TOP N始终给出相同的结果 如果你需要对你的问题所暗示的权重求和,试试下面的方法
Select ID, [Weight]
From
(select ID, SUM([weight]) as [weight], Row_number() over(order by ID) as N
Where Expired = 0
Having SUM(weight) > = 5) X
where N <= @x
或者如果你想要最重的
Select ID, [Weight]
From
(select ID, SUM([weight]) as [weight], Row_number() over(order by SUM([weight]) desc) as N
Where Expired = 0
Having SUM(weight) > = 5) X
where N <= @x
其中@X是所需的数字您可以写为:
select top 10 * from -- top N goes here
(
SELECT *,SUM(weight) OVER (partition BY expired ORDER BY Id asc) as cumulativesum
FROM
Products
WHERE expired = 0
)T
where cumulativesum>=5
选择顶部N。。。哪里按…排序?在这种情况下,重量之和是什么意思?你想加多少?一条记录怎么能被汇总呢?现在还不清楚你到底想在这里实现什么。你能,至少,向我们展示一下示例输入和期望的输出吗?向我们展示您已经拥有的查询基础可能也会很有用。在我看来,问题似乎是先获得x,而不是试验产品,但x是有限的,因此SumWeight限制在5千克。但是,我仍然可以解释错误。哪个SQL Server版本?跑步应该很容易。非常感谢演示,我有点怀疑。第一个结果是:ID=3,累计=5。如果ID=3的行的权重为4,那么累积和怎么可能是5?