2017-09-08 14 views
-1

私のデータベースには2つの行があります:Barcode、Profit; 彼らは、例えば、利益に応じて降順である:SQL Sum条件が満たされるまでの行番号

Barcode , Profit: 
101 , 10000 
106 , 9999 
107 , 8888 
108 , 222 

私は次の操作を実行するSQLクエリする必要があります:私はすべての利益を合計する必要が は、その80%値を見て、その後、加算開始80%が満たされるまで、バーコードの値、例えば:

Barcode , Profit: 
101 , 10000 
106 , 9999 
107 , 8888 
108 , 222 

10000 + 9999 + 8888 + 222 = 29109

29109は合計であり、その80%は= 23 287,2

あります

は10000 + 9999 + 8888以来%の80the結果は返す必要があります含まれていない:

Barcode 
101 
106 
107 

答えて

2

あなたは、この使用して変数を行うことができます。

select t.* 
from (select t.*, (@sump := @sump + profit) as running_profit 
     from t cross join 
      (select @sump := 0) params 
     order by profit desc 
    ) t 
where running_profit < 0.8 * @sump; 

内側のクエリは、累積利益を計算します。副作用として、利益の総和も計算されます。

外側のwhereは、80%のしきい値を超える最初の行までのすべての行を選択します。

関連する問題