sqlite选择行,直到列中满足总量

时间:2013-11-23 06:17:28

标签: sqlite

我已经看到了与mysql类似的问题,但我几乎找不到解决sqllite问题的方法。

我的样本表,

-----------------------------
ID   | Product Name   | Price
-----------------------------
1            A           2
2            B           2
3            C           1
4            D           3
5            E           2

这里我需要获取行,直到price列的总数等于或小于5的升序。

2 个答案:

答案 0 :(得分:5)

您可以使用下面的Product IDORDER BY Product ID来执行累计总计:

SELECT p1.ID, p1.ProductName, p1.Price,
(SELECT SUM(p2.Price) FROM Products p2 WHERE p1.ID >= p2.ID  ORDER BY p2.ID ) as RunningTotal
FROM Products p1
WHERE RunningTotal <= 5
ORDER BY p1.ID

请参阅Fiddle Demo

或使用下面的PriceORDER BY Price

SELECT p1.ID, p1.ProductName, p1.Price, 
(SELECT SUM(p2.Price) FROM Products p2 WHERE p1.Price >=  p2.Price ORDER BY Price ) 
as RunningTotal
FROM Products p1
WHERE RunningTotal <= 5
ORDER BY p1.Price;

请参阅2nd Fiddle Demo

答案 1 :(得分:0)

最好在代码中执行它,因为据我所知,SQLite不支持简单的方法来执行累积求和。您可以在价格列上创建索引。

然后运行像

这样的查询
SELECT * FROM <table> ORDER BY Price

请注意,这不会急切地从数据库中获取所有行,而只是为您提供游标。继续从光标中取出下一行,直到达到所需的总和。