我想獲取表中的所有記錄,直到某個列的總和小於或等於'n'。查詢獲取所有記錄,直到列的總和小於或等於一個值
例如:
表:數據
slno item price 1 item1 1000 2 item2 2000 3 item3 3000 4 item4 4000 5 item5 5000 6 item6 6000
我想從上面的表中的所有記錄,直到總和(價格)小於或等於10000
所以,用上表我的結果將是前4條記錄。
我想獲取表中的所有記錄,直到某個列的總和小於或等於'n'。查詢獲取所有記錄,直到列的總和小於或等於一個值
例如:
表:數據
slno item price 1 item1 1000 2 item2 2000 3 item3 3000 4 item4 4000 5 item5 5000 6 item6 6000
我想從上面的表中的所有記錄,直到總和(價格)小於或等於10000
所以,用上表我的結果將是前4條記錄。
你可以做
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演示
感謝您的查詢。這符合我的期望,但是,由於我的表有大量數據,執行需要很多時間。你能給我一個更好的性能優化查詢 – user3318300
你能給我一個更好的性能優化查詢,因爲上面的查詢需要更多的時間來執行,因爲我使用的表有大量的數據。 – user3318300
這兩個查詢都需要全表掃描。因此,爲了提高性能,要做的一件事就是限制源行的數量,例如通過在'WHERE'子句中加入'slno'(或其他專欄)範圍,比如'WHERE slno BETWEEN 1 AND 10'或'WHERE slno <5000' ...... – peterm
使用PHP或類似的東西做到這一點。 – Alexander
使用PL/SQL,因爲它也必須做一些編程。 – Afaq
http://stackoverflow.com/questions/7340013/return-rows-where-sum-on-a-field-less-than-a-given-value可能有用 –