Расчет среднего возраста в Джанго - PullRequest
0 голосов
/ 02 марта 2010

Мне нужно выяснить средний возраст предметов (сгруппированных по различным критериям, но, похоже, это не проблема). Однако я не могу найти, как эффективно создать агрегацию через DateTimeField, используя Django (поверх MySQL).

Чистый Item.objects.all.aggregate(Avg('created')), кажется, дает абсолютно фиктивные значения (например, 20081988007238.133) и с использованием Item.objects.all.extra(...) Я не нашел способа агрегирования.

Конечно, я могу вручную создать SQL-запрос (что-то вроде SELECT AVG(UNIX_TIMESTAMP(created)) FROM items_item), но я бы предпочел не использовать в приложении специальный код MySQL.

Только для справки, образец модели, которую я использую для тестирования:

class Item(models.Model):
    name = models.CharField(max_length = 255)
    created = models.DateTimeField()

1 Ответ

0 голосов
/ 02 марта 2010

Я думаю, что нет другого способа использования метода extra. Тогда это должно выглядеть так (не проверено):

Item.objects.extra('avg': 'AVG(UNIX_TIMESTAMP(created))'.values('avg')

Проблема в том, что вам нужно конвертировать дату в метку времени UNIX раньше. В противном случае вы не можете рассчитать среднее. Среднее число строк действительно будет производить мусор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...