django orm에서 그룹별 주석 사용
사용법
이전 ORM의 group by method는 Django 1.8에서는 더 이상 사용할 수 없으며, 이를 구현하려면 annotate를 사용해야 합니다
예제 1
첫 번째 값이 사용됩니다. 그룹화해야 하는 필드를 선택하고(여기서는 user_id별로 그룹화) 필수 필드를 그룹화하고 집계하기 위해 주석을 답니다(각 user_id에 해당하는 질문 ID 수와 Catalog_id의 최소값이 필요합니다) ), 그런 다음 값을 사용하여 실제로 필수 필드(원래 user_id 및 집계 필드의 별칭)를 쿼리합니다.
첫 번째 값은 그룹화 기준에 사용되는 필드를 지정하는 데 사용되며 Count, Min이어야 합니다. 및 기타 집계 함수(예: F(" user_id") 별칭 사용 불가), 최종 쿼리가 필요하지 않으면 집계할 필요가 없습니다.
두 번째 값 이 사용됩니다. 실제 선택한 필드를 지정하려면 주석 뒤에 필드 이름만 지정할 수 있습니다. 예를 들어 user_id는 그룹화에 사용되는 필드이고 직접 가져올 수 있지만 다른 필드는 집계되어야 하며 집계된 별칭인 qid 및 cid를 사용해야 합니다. . 원본 테이블에도 필드 상태가 있는 경우 이 필드는 주석으로 집계되지 않으므로 최종 값을 필드에 쿼리할 수 없습니다.)
q = PxbNCEUserQuest.objects.filter(user_id=335).values("user_id").annotate(qid=Min("question_id"), cid=Min("catalog_id")).values("user_id", "qid", "cid") print q print q.query # 输出 [{'qid': 22, 'user_id': 335L, 'cid': 17}] SELECT `pxb_nce_user_quest`.`user_id`, MIN(`pxb_nce_user_quest`.`question_id`) AS `qid`, MIN(`pxb_nce_user_quest`.`catalog_id`) AS `cid` FROM `pxb_nce_user_quest` WHERE `pxb_nce_user_quest`.`user_id` = 335 GROUP BY `pxb_nce_user_quest`.`user_id` ORDER BY NULL
예 2
예 1과 동일, 하지만 여기서 첫 번째 주석은 필드를 그룹화하는 데 사용되고 두 번째 주석은 다른 필드에 개별적으로 별칭을 지정하는 데 사용됩니다
q = PxbNCEUserQuest.objects.filter(user_id=335).values("user_id").annotate(qid=Min("question_id"), cid=Min("catalog_id")).annotate(uid=F("user_id")).values("uid", "qid", "cid") print q print q.query # 输出: [{'qid': 22, 'uid': 335L, 'cid': 17}] SELECT MIN(`pxb_nce_user_quest`.`question_id`) AS `qid`, MIN(`pxb_nce_user_quest`.`catalog_id`) AS `cid`, `pxb_nce_user_quest`.`user_id` AS `uid` FROM `pxb_nce_user_quest` WHERE `pxb_nce_user_quest`.`user_id` = 335 GROUP BY `pxb_nce_user_quest`.`user_id` ORDER BY NULL
예:
SomeModel.objects.annotate(Count('somecol' ))
GROUP BY: 모든 필드
SomeModel.objects.values ('name').annotate(Count('somecol'))
GROUP BY: 이름 필드 , somecol 집계
SomeModel.objects.annotate(Count('somecol')).values ('name')
GROUP BY: 모든 필드, 쿼리 이름
SomeModel .objects.values('name', 'pk').annotate(Count('somecol')).values('pk')
GROUP BY: 이름, pk 필드, 쿼리 pk 필드
SomeModel.objects.values('name').annotate(Count('somecol')).values('pk')
GROUP BY: 이름, pk 필드, 쿼리 pk 필드
관련지식 :
위의 질의 방식은 처음에는 이해하기 어려울 수 있으나, 원본 SQL문의 그룹별 방식을 비교해 보면 유사한 원리를 발견할 수 있다
이전 버전의 mysql에서는
a로 t 그룹에서 a, b를 선택하면 정상적으로 작동하며 b 필드는 자동으로 첫 번째 필드를 가져옵니다. 이는 암시적 집계와 동일합니다.
위 명령문 엄격한 모드 sql_mode=ONLY_FULL_GROUP_BY가 기본적으로 활성화되어 있기 때문에 새 버전의 mysql에서는 작동할 수 없습니다. 올바른 방법은 다음과 같습니다.
t 그룹에서 a,max(b)를 b로 선택합니다. 모든 쿼리를 집계하기 위해 표시해야 하는 필드
새 버전의 mysql 구문을 비교해 보면 ORM의 쿼리 방법과 매우 유사하다는 것을 알 수 있습니다

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

정규 표현식은 프로그래밍의 패턴 일치 및 텍스트 조작을위한 강력한 도구이며 다양한 응용 프로그램에서 텍스트 처리의 효율성을 높입니다.

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

이 기사는 Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask 및 요청과 같은 인기있는 Python 라이브러리에 대해 설명하고 과학 컴퓨팅, 데이터 분석, 시각화, 기계 학습, 웹 개발 및 H에서의 사용에 대해 자세히 설명합니다.

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.
