1
比方說,我有一個這樣的表(由id
訂購):限制
id amount
--- ---
1 10
2 15
3 10
4 30
我想查詢將返回行,使得amount
總和大於給定數量較大。因此(在不存在的語法中)SELECT id, amount LIMIT BY running_total(amount) 20
選擇前2行,... LIMIT BY running_total(amount) 60
選擇所有行。我無法更改模式以保持預先計算的運行總數。這可以合理有效地完成嗎?如果答案只適用於SQLite,那將是可以接受的。
這會有二次行爲,還是SQL引擎足夠智能來優化它? – 2010-10-25 06:34:06
@Alexey Romanov:不確定你的意思是二次的,如果你知道一種方法來看看SqlLite的查詢計劃讓我知道:) – Andomar 2010-10-25 09:39:40
第一行的子查詢需要查看0行,第二行:1行,然後是2, 3等。如果第N行是正確的,我們必須看0 + 1 + 2 + ... +(N-1)= N *(N-1)/ 2行。但似乎很清楚,我們只需要看N行。 – 2010-10-25 14:10:00