为简单起见,我将问题转换为员工/工资问题。
拥有员工记录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 或等效的算法矿石,但不使用给定系统的怪癖)
或者:是否可以通过在记录中添加额外字段来提高效率,这些字段可以在插入/更新操作上保持最新而没有太多开销?