簡単にするために、この問題を従業員/給与の問題に変換しました。
次のような従業員記録を持ってemp
いる:
| id | salary (in 1000s) |
数値 ' ' が与えられた場合、num
給与 ' sal
' を取得する従業員の数をsalary<=sal
求め>=num
ます (統計における曲線下面積の問題に似ています)。Python と Sqlite を使用していますが、問題はそれらに固有のものではありません。
私は次のことをしています(素朴な開始ソリューション):
num = some_num
sal = 1000 # starting miminmum value
count = 0
while count < num:
sql = 'select count(*) from (select 1 from emp where salary<=? limit ?)'
# using limit so that we don't keep counting more than num - might help (?)
(count,) = cursor.execute(sql, (sal, num)).next() # using apsw sqlite adapter
sal += 1000
print sal
これをより効率的にするにはどうすればよいでしょうか。(標準SQLまたは同等のものを使用してアルゴリズム的に鉱石を生成しますが、特定のシステムの癖は使用しません)
または、追加のフィールドをレコードに追加して、オーバーヘッドをあまりかけずに挿入/更新操作で最新の状態に保つことで、より効率的にすることができますか?