首页 > 其他分享 >Django3中分组查询的一个坑

Django3中分组查询的一个坑

时间:2023-06-11 15:11:10浏览次数:41  
标签:help models text 查询 length 分组 32 Django3 store

最近在学习django的分组查询,发现使用通常的values加annotate方法,获取不到我想要的结果,后来通过查询官方文档得到答案

一、问题描述

1.1 模型

from django.db import models

# Create your models here.


class Goods(models.Model):
    g_name = models.CharField(max_length=32, help_text='商品名称')
    g_price = models.FloatField(help_text='商品价格')
    g_old_price = models.FloatField(help_text='商品原价')
    g_public = models.DateField(help_text='出厂日期')
    g_number = models.IntegerField(help_text='数量')
    g_store = models.CharField(max_length=32, help_text='商品产地')
    save_time = models.IntegerField(help_text='保质期')
    save_unit = models.CharField(max_length=32, help_text='保存单元')
    del_flag = models.CharField(max_length=32, help_text='逻辑删除')

    def __str__(self):
        return self.g_name

    class Meta:
        ordering = ['-id']
        db_table = 't_goods'

查询每家店铺的生鲜种类

Goods.objects.values("g_store").annotate(total=Count("id"))

结果

<QuerySet [{'g_store': '老边生鲜', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'g_store': '华润万家', 'total': 1}, {'g_store': '老边生鲜',
 'total': 1}, {'g_store': '沃尔玛超市', 'total': 1}, {'g_store': '永辉超市', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'g_store': '沃尔
玛超市', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'g_store':
'老边生鲜', 'total': 1}, {'g_store': '华润万家', 'total': 1}, {'g_store': '沃尔玛超市', 'total': 1}, {'g_store': '华润万家', 'total': 1}, {'g_sto
re': '沃尔玛超市', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'g_store': '华润万家', 'total': 1}, {'g_store': '老边生鲜', 'total': 1}, {'
g_store': '老边生鲜', 'total': 1}, '...(remaining elements truncated)...']>

二、解决问题

2.1 解决方案

Goods.objects.order_by("g_store").values("g_store").annotate(total=Count("id"))

结果

<QuerySet [{'g_store': '华润万家', 'total': 2560}, {'g_store': '永辉超市', 'total': 2471}, {'g_store': '沃尔玛超市', 'total': 2463}, {'g_store':
'老边生鲜', 'total': 2508}]>

 

三、官方文档

 

四、终极答案

Goods.objects.order_by().values("g_store").annotate(total=Count("id"))

结果

<QuerySet [{'g_store': '老边生鲜', 'total': 2508}, {'g_store': '华润万家', 'total': 2560}, {'g_store': '沃尔玛超市', 'total': 2463}, {'g_store':
'永辉超市', 'total': 2471}]>

 

标签:help,models,text,查询,length,分组,32,Django3,store
From: https://www.cnblogs.com/Durant0420/p/17472968.html

相关文章

  • 自研ORM嵌套查询和子查询,强不强大您说了算。
    测试代码varcount=0;varrefAsync=newRefAsync<int>();//下面示例方法的重载均支持varquery=db.Query<Product>().Select(s=>new{WithAttr_First=d......
  • 飘 查询字母频率并计算 频数
    package文本字母使用频率;importjava.io.*;publicclassLetter1{publicstaticvoidmain(Stringargs[]){try{charshu[]=newchar[1000000];charzimu[]=newchar[52];intj=0;int......
  • 03地铁查询系统
    地铁查询系统2023.6.101、优化返回两个站点之间最短路径功能:成为一个类,进行单元测试。2、生成遍历车站类:要求尽可能快地遍历地铁的所有车站呢(只用经过一次,不用下车,就算经过车站)。  连接数据库:packagecom.example.underground; importjava.sql.Connection;importja......
  • SpringBoot进阶教程(七十六)多维度排序查询
    在项目中经常能遇到,需要对某些数据集合进行多维度排序的需求。对于集合多条件排序解决方案也有很多,今天我们就介绍一种,思路大致是设置一个分值的集合,这个分值是按照需求来设定大小的,再根据分值的大小对集合排序。v需求背景我们来模拟一个需求,现在需要查询一个用户列表,该列表......
  • ALEXA排名代表什么?网站ALEXA排名怎么查询?
    ALEXA排名是根据一个站点的流量数据来列出的排名,排名越靠前,说明该网站的流量越大,被访问的次数也越多。 ......
  • 使用clickhouse和mysql查询时间对比
    业务场景,对于数据量过大的数据统计,跑脚本会很吃力先建立一个clickhouse的mysql引擎表关联本地mysql数据表,以下这个表会自动同步mysql主表数据CREATETABLEtest_table(idUInt32,messageString,contentString,remarkString,order_idString,user_idUInt......
  • Python操作Excel文件中多WorkSheet模拟数据库内连接查询
    严格意义上来讲,是可以把Excel文件看作数据库的,C#通过OLEDB.net就可以使用SQL语句操作Excel文件中的数据。本文代码使用Python扩展库openpyxl操作Excel文件中多个WorkSheet中的数据,模拟了数据库的内连接。假设Excel文件名为data.xlsx,其中第一个WorkSheet数据如下:第二个WorkSheet数据......
  • 分页查询和条件分页查询
    分页查询分析:分析文档要求查看前端传递给后台的参数分析参数进行编码后台返回给前端的数据思路浏览器->Controller层->Service层->Mapper层->数据库设置分页拦截器@ConfigurationpublicclassMybatisPlusConfig{@BeanpublicMybati......
  • EXCEL如何实现输入指定ID查询对应的信息
    要求:在第2行输入ID按enter键后查询出第4行的信息。步骤:(1)首先将第2行单元格的属性【保护】中取消【锁定】,因为在要在此行输入需要查询的ID,在锁定工作表的情况下,要保障此行是可写的。(备注:第2行需调整为文本格式) (2)本次的实验数据只有三个条目(ID:0201,0202,0203)将这三行数据放在工......
  • 地铁查询
    packagecom.example.subway1;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.TextView;importandroidx.appcompat.app.AppCompatActivity;importandroid.os.Bundle;importdatabase.DBHelper;importjava.util.ArrayList;impor......