2016-07-29 78 views
3

我想選擇總計達到某個值的行。SQL:如何選擇總計達到特定值的行

我的SQL(SQL Fiddle):

id user_id  storage 
1 1   1983349 
2 1   42552 
3 1   367225 
4 1   1357899 
37 1   9314493 

應該計算總計爲410000,並得到了行。同時它應該得到的東西是這樣的:

id user_id  storage 
2 1   42552 
3 1   367225 

正如你所看到的,42552 + 367225 = 409777.它選擇兩行近410000.

我已經試過一切,但它沒有工作: (

對不起,我的語言,我是德國人。

+0

用PHP這將是微不足道的你想要一個MySQL的唯一的解決辦法? –

+0

看起來你對StackOverflow來說比較新。如果答案對你有幫助,一定要投票。如果它解決了您的問題,請將答案標記爲已接受。 –

+0

@GeorgePant不,PHP會更好:) –

回答

1

您可以使用相關子查詢來獲取運行總數並檢索其運行總數爲<指定數字的那些行。 (請注意,我改變了存儲列int如果是varchar比較會返回錯誤的結果。)

select id,user_id,storage 
from uploads t 
where storage+coalesce((select sum(storage) from uploads 
         where storage<t.storage),0) < 410000 
order by storage 

SQL Fiddle

編輯:當有在存儲列重複的值,它有通過包含id列的條件在運行總和中進行覈算。 (在這種情況下<條件已被使用,因此對於重複存儲的值最小的ID被拾起)

select id,user_id,storage 
from uploads t 
where storage+coalesce((select sum(storage) from uploads 
         where storage<t.storage 
         or (storage=t.storage and id < t.id)),0) < 410000 
order by storage 
+0

非常好。它的工作原理! –

+0

哦發現問題:http://sqlfiddle.com/#!9/70e704/1 –

+0

你需要選擇這些行中只有一行具有相同的值。在這種情況下,在user_id和storage中使用'group by'。但是,這在其他情況下也會出現問題..我會解決它。 –

2

的SUM()函數返回數值列的總和。

SQL SUM()語法

SELECT SUM(column_name) FROM table_name; 
+0

我知道,但沒有讓我到任何地方:( –

+0

對不起,你想去的地方請嘗試解釋我會按照你的要求編輯我的答案。 –

1

這是你所需要的:

SET @suma = 0; 
SELECT @suma:[email protected]+`storage`, id, storage FROM table 
WHERE @suma<=410000 
ORDER BY storage ASC; 

我補充說: 「ORDER BY存儲ASC」 來跳過有多少存儲行。