Объединенный запрос от Django ORM
Необходимо получить агрегированные данные из 2 разных таблиц.
Elements
element_type tempcolumn
xyz test1
pqr test2
xyz test3
Users:
User_names
auser
buser
cuser
нужен вывод в следующем формате
element_type count
xyz 2
pqr 1
users 3
Пример SQL-запроса:
SELECT element_type, count(*)
FROM Elements group by element_type
union
select 'users',count(*) from Users
Можем ли мы оправдать то же самое с Django Orm?
1 ответ
Решение
На Django вы можете использовать |
чтобы объединить два набора запросов, но я здесь не использую.
Поскольку values / annotate фактически возвращает список кортежей вместо query_set
Вы можете запустить сырой SQL на Django, но сырье для оптимизации. https://docs.djangoproject.com/en/1.9/topics/db/sql/
object_count = Elements.objects.all().values('element_type').annotate(total=Count('element_type'))
response_data = {}
for q in object_count:
if q['element_type'] == 'xyz':
response_data['total_ xyz'] = q['total']
if q['element_type'] == 'pqr':
response_data['total_ pqr'] = q['total']
response_data['users_count'] = MyUser.objects.all().count()