2014-02-17 29 views
1

我想獲取表中的所有記錄,直到某個列的總和小於或等於'n'。查詢獲取所有記錄,直到列的總和小於或等於一個值

例如:

表:數據

 
slno  item  price 

1  item1  1000 
2  item2  2000 
3  item3  3000 
4  item4  4000 
5  item5  5000 
6  item6  6000 

我想從上面的表中的所有記錄,直到總和(價格)小於或等於10000

所以,用上表我的結果將是前4條記錄。

+0

使用PHP或類似的東西做到這一點。 – Alexander

+0

使用PL/SQL,因爲它也必須做一些編程。 – Afaq

+0

http://stackoverflow.com/questions/7340013/return-rows-where-sum-on-a-field-less-than-a-given-value可能有用 –

回答

2

你可以做

SELECT slno, item, price 
    FROM 
(
    SELECT slno, item, price, @t := @t + price total 
    FROM table1 CROSS JOIN (SELECT @t := 0) i 
    ORDER BY slno 
) q 
WHERE total <= 10000 

SELECT slno, item, price 
    FROM 
(
    SELECT slno, item, price, 
    (
    SELECT SUM(price) 
     FROM table1 
    WHERE slno <= t.slno 
) total 
    FROM table1 t 
) q 
WHERE total <= 10000 
ORDER BY slno 

這裏是SQLFiddle演示

+0

感謝您的查詢。這符合我的期望,但是,由於我的表有大量數據,執行需要很多時間。你能給我一個更好的性能優化查詢 – user3318300

+0

你能給我一個更好的性能優化查詢,因爲上面的查詢需要更多的時間來執行,因爲我使用的表有大量的數據。 – user3318300

+0

這兩個查詢都需要全表掃描。因此,爲了提高性能,要做的一件事就是限制源行的數量,例如通過在'WHERE'子句中加入'slno'(或其他專欄)範圍,比如'WHERE slno BETWEEN 1 AND 10'或'WHERE slno <5000' ...... – peterm

相關問題