Найти - Пользователи
Полная версия: Запрос к БД, сгруппировать кол-во записей по дате
Начало » Django » Запрос к БД, сгруппировать кол-во записей по дате
1
hdj
Добрый день, задача:
Из этой таблицы нужно получить список типа: arr(дата) = число записей. То есть найти количество записей для каждой даты.


То есть, чтобы список был такой:
arr(дата 1) = 3
arr(дата 2) = 4
arr(дата 3) = 2



Самый простой вариант, это получить список методом values_list('date', flat=True). И “руками” в цикле сделать счётчик:
for d in model.objects.filter(date__range=range).values_list('date', flat=True):
    arr[d] += 1

Но догадываюсь, что правильнее было бы через django ORM, подскажите, пожалуйста, как.
lead-in
Можно так:
from django.db.models import Count
dict([(x['date'], x['id__count']) for x in model.objects.values('date').annotate(Count('id'))])

Но “ручками” тоже нормально, а читается даже лучше, ИМХО…
inoks
так а почему нельзя просто так сделать?

  qs = Item.objects.values('date').annotate(count=Count("id")).order_by()

https://docs.djangoproject.com/en/1.8/topics/db/aggregation/
lead-in
так а почему нельзя просто так сделать?
Вы меня спрашиваете?) Так вы вроде тоже самое и написали, разве нет?
dict([(x, x) просто для перегона результата в словарь
inoks
lead-in
Так вы вроде тоже самое и написали, разве нет?
Ваш код без order_by() не будет работать так, как вы ожидаете.
lead-in
Ваш код без order_by() не будет работать так, как вы ожидаете.

А можно узнать почему? Что даст сортировка для запроса вида:
select date, count(id) from "table_name" group by date
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB