Usage
The previous ORM group by method can no longer be used in Django 1.8. It needs to be implemented using annotate
Example 1
The first values is used to select the field that needs to be used for group by (here group by user_id ), followed by annotate to group and aggregate the required fields (the number of question_id corresponding to each user_id and the minimum value of catalog_id are required), and then values to actually query the required fields (aliases of the original user_id and the aggregated fields)
The first values are used to specify the fields used for group by, which must be aggregate functions such as Count and Min (for example, using F ("user_id") to take aliases will not work). If there is no need for final query, there is no need to aggregate.
The second values is used to specify the actual selected field. Only the field name after annotation can be specified (take this as an example: user_id is a field used for grouping and can be taken directly, while other fields must be aggregated and aggregated using After the alias, qid and cid, if the original table also has a field status, this field is not aggregated in annotate, so the final value cannot be queried for this field)
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
Example 2
The same as example 1, but the first one here annotate is used to group fields, and the second annotate is used to alias other fields individually
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
Example:
SomeModel.objects.annotate(Count('somecol'))
GROUP BY: all fields
SomeModel.objects.values ('name').annotate(Count('somecol'))
GROUP BY: name field, aggregate somecol
SomeModel.objects.annotate(Count('somecol')).values('name')
GROUP BY: all fields, query name
SomeModel.objects.values('name', 'pk').annotate(Count('somecol')).values('pk')
GROUP BY: name, pk field, Query the pk field
SomeModel.objects.values('name').annotate(Count('somecol')).values('pk')
GROUP BY: name, pk field, query the pk field
Associated knowledge:
The above query method may be difficult to understand at first, but if you compare the group by method of the original sql statement, you will find a similar principle
In the old version of mysql,
select a, b from t group by a will work normally, and the b field The first item will be automatically taken, which is equivalent to implicit aggregation. The above statement in the new version of mysql cannot work because the strict mode sql_mode=ONLY_FULL_GROUP_BY is enabled by default. The correct method is:
select a,max(b) as b from t group by, that is, the fields that need to be displayed to aggregate all queries
Comparing the new version of mysql syntax, you will find that it is very similar to the query method in ORM

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

This article explains how to use Beautiful Soup, a Python library, to parse HTML. It details common methods like find(), find_all(), select(), and get_text() for data extraction, handling of diverse HTML structures and errors, and alternatives (Sel

Python's statistics module provides powerful data statistical analysis capabilities to help us quickly understand the overall characteristics of data, such as biostatistics and business analysis. Instead of looking at data points one by one, just look at statistics such as mean or variance to discover trends and features in the original data that may be ignored, and compare large datasets more easily and effectively. This tutorial will explain how to calculate the mean and measure the degree of dispersion of the dataset. Unless otherwise stated, all functions in this module support the calculation of the mean() function instead of simply summing the average. Floating point numbers can also be used. import random import statistics from fracti

This article compares TensorFlow and PyTorch for deep learning. It details the steps involved: data preparation, model building, training, evaluation, and deployment. Key differences between the frameworks, particularly regarding computational grap

The article discusses popular Python libraries like NumPy, Pandas, Matplotlib, Scikit-learn, TensorFlow, Django, Flask, and Requests, detailing their uses in scientific computing, data analysis, visualization, machine learning, web development, and H

This article guides Python developers on building command-line interfaces (CLIs). It details using libraries like typer, click, and argparse, emphasizing input/output handling, and promoting user-friendly design patterns for improved CLI usability.

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

The article discusses the role of virtual environments in Python, focusing on managing project dependencies and avoiding conflicts. It details their creation, activation, and benefits in improving project management and reducing dependency issues.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 English version
Recommended: Win version, supports code prompts!

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver Mac version
Visual web development tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Linux new version
SublimeText3 Linux latest version