1
Я делаю анализ данных в Django, и я пытаюсь создать запрос базы данных, который может перебирать модель и распечатывать количество строк в пределах интервала.Django: лучший запрос для нормального распространения
Проблема в том, что общая сумма результатов варьируется. Если «интервал» изменен, «total» также изменится. Почему это так?
# Get the data
data = COPD6Model.objects.filter(patient=patients)
# Calculate the min and max value
max_min = data.aggregate(Max("fev1_procent"), Min("fev1_procent"))
max = float(max_min.get("fev1_procent__max"))
min = float(max_min.get("fev1_procent__min")) - float(interval)
# Set the interval
interval = 2.0
total = 0
# Iterate over the query
for start in numpy.arange(min, max, interval):
end = start + interval
result = len(data.filter(fev1_procent__gt=start, fev1_procent__lte=end))
total += result
print total
Только примечание стороны, вы можете использовать 'queryset.count()' вместо 'len (queryset)' –
Кроме того, можете ли вы пояснить, почему вы вычитаете 'float (interval)' при первом вычислении 'min'? –
Да, потому что запрос ищет только значения «больше, чем начало». Поэтому, если минимальное значение равно стартовому значению, оно не будет считаться (только на первой итерации). Вот почему я устанавливаю значение «min» ниже фактического минимального значения. Надеюсь, это так! – Vingtoft