每个成员都有多个记录存储在数据库中。我需要为每个用户总结一列,并从另一列获得最高/最低值。该表有超过100k的记录,一个用户可能在表中有超过2k的记录。
我试过了:
my_reader = open('file.csv', encoding = 'utf-8')
rows = 0
apples = 0
for record in my_reader:
if record.count('apple') > 0:
rows += 1
apples += record.count('apple')
print('{apples: %d } {# of rows: %d }' % (apples, rows))
但是将时间限制设置为300确实是这样做的正确方法吗?我还尝试了一个准备好的语句,只在循环中分配ID,以及其他一些东西。所有这些都不能正常工作。
答案 0 :(得分:1)
100k记录真的不是那么多,这个查询没有理由花费超过5分钟。
不是获取不同的ID列表并迭代它们,而是查询每个ID的这些值,最好一次完成所有操作,然后迭代结果以执行您需要的操作。
select
`id`,
sum(`price`) as `sum_price`,
min(`dtime`) as `min_dtime`,
max(`dtime`) as `max_dtime`
from
`table`
group by
`id`
(这假设"其他字段"您需要获得最小值和最大值为dtime
)
我在PHP方面并不强大,但从SQL的角度来看,这样做的速度要快得多。