1
爲簡單起見,我將該問題轉換爲員工/工資問題。加速SQL語句以查找導致設置記錄數的條件參數
擁有僱員記錄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或等價物,但不使用給定系統的怪癖)
或者:可以通過在記錄中添加額外的字段來提高效率,這些字段可以保持最新的插入/更新操作沒有太多的開銷?
感謝。這可能對我有點幫助,但我們仍然在做很多計數操作,而且如果薪水有很大差距,那麼許多操作都是不必要的。 –
@BaselShishani你能讀我的編輯嗎?看起來像解決方案比看起來簡單.. –
是的,如果我們按工資排序並選擇num_th記錄,那麼低於該工資值(包括)的總記錄將等於num。 –