django group by (annotate), .values().annotate(), values( , ).distinct().annotate(Count())
values()
clause is applied before other argumentswithin the same values()
clause. If you need to group by another value,add it to an earlier values()
clause instead. For example: >>> from django.db.models import Count
>>> Blog.objects.values('entry__authors', entries=Count('entry'))
>>> Blog.objects.values('entry__authors').annotate(entries=Count('entry'))
https://docs.djangoproject.com/en/2.0/ref/models/querysets/#values
, , :
Mro.objects.values('LteScTadv', 'LteScAOA').distinct().annotate(Count('id'))
다음을 사용할 수 있습니다.
msgS = MessageTab.objects.values_list('msg_status').annotate(Count('id'))
1
그 중에서 id는 데이터베이스에서 자동으로 생성된 자증 필드입니다.values_list 사용법은 Google 또는 print에서 직접 볼 수 있습니다.
이 때 데이터베이스에서 실제로 실행되는 코드는 다음과 같습니다.
print msgS.query
1
프린트해.다음을 볼 수 있습니다.
SELECT `message_tab`.`msg_status`, COUNT(`message_tab`.`id`) AS `id__count` FROM `message_tab` GROUP BY `message_tab`.`msg_status` ORDER BY NULL
1
직관적이고 명료하다.msg를 통해status에서 group by를 진행합니다.사용자 정의
id__count
(예: msg)num - annotate (msg num=Count ('id') 를 사용할 수 있습니다.여러 개의 검색 조건이 존재할 때, 예를 들어 최근 7일 동안 메시지name이 그룹의 메시지에 속하는 경우 Q 함수를 사용할 수 있습니다.
date_end = now().date() + timedelta(days=1)
date_start = date_end - timedelta(days=7)
messageTimeRange = (date_start, date_end)
GroupList = getGroupIdLis(request.user) # group 。。
qQueryList = [Q(message_time__range=messageTimeRange), Q(message_name__in=GroupList)] # Q
msgS = MessageTab.objects.filter(reduce(operator.and_, qQueryList)).values_list('msg_status').annotate(msg_num=Count('id'))
1
2
3
4
5
6
7
print msgS를 다시 호출합니다.query에서 볼 수 있는 SQL 문:
SELECT `message_tab`.`msg_status`, COUNT(`message_tab`.`id`) AS `msg_num` FROM `message_tab` WHERE (`message_tab`.`message_time` BETWEEN 2017-03-27 00:00:00 AND 2017-04-03 00:00:00 AND `message_tab`.`message_name` IN (1785785, 78757, 285889, 2727333, 7272957, 786767)) GROUP BY
`message_tab`.`msg_status` ORDER BY NULL
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.