如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?

2023-11-30

序幕:

这是SO中经常出现的一个问题:

  • Django 模型分组依据
  • Django 相当于 count 和 group by
  • 如何在 django 中进行 GROUP BY 查询?
  • 如何使用 ORM 进行相当于 SQL 计数、分组和连接查询?

我已经在 SO 文档上编写了一个示例,但由于文档将于 2017 年 8 月 8 日关闭,我将遵循以下建议这个被广泛投票和讨论的元答案并将我的示例转换为自我回答的帖子。

当然,我也非常乐意看到任何不同的方法!


问题:

假设模型:

class Books(models.Model):
    title  = models.CharField()
    author = models.CharField()
    price = models.FloatField()

如何利用 Django ORM 对该模型执行以下查询:

  • GROUP BY ... COUNT:

    SELECT author, COUNT(author) AS count
    FROM myapp_books GROUP BY author
    
  • GROUP BY ... SUM:

    SELECT author,  SUM (price) AS total_price
    FROM myapp_books GROUP BY author
    

我们可以执行一个GROUP BY ... COUNT or a GROUP BY ... SUMDjango ORM 上的 SQL 等效查询,使用annotate(), values(), the django.db.models's Count and Sum方法尊重和可选order_by() method:

  • 按...计数分组:

     from django.db.models import Count
    
     result = Books.objects.values('author')
                           .order_by('author')
                           .annotate(count=Count('author'))
    

    现在结果包含一个字典有两把钥匙:author and count:

       author    | count
     ------------|-------
      OneAuthor  |   5
     OtherAuthor |   2
        ...      |  ...
    
  • 按...分组:总和:

     from django.db.models import Sum
    
      result = Books.objects.values('author')
                            .order_by('author')
                            .annotate(total_price=Sum('price'))
    

    现在结果包含一个字典有两列:author and total_price:

       author    | total_price
     ------------|-------------
      OneAuthor  |    100.35
     OtherAuthor |     50.00
         ...     |      ...
    

更新 13/04/2021

正如 @dgw 在评论中指出的那样,如果模型使用元选项来对行进行排序(例如ordering), the order_by() clause 是最重要的为了大会的成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM? 的相关文章

随机推荐

  • 将文件上传到 Google 云端硬盘?

    我按照此文档将文件上传到 Google 云端硬盘 https developers google com drive android files 现在 每次我想上传文件时 都会出现 Google Drive 的弹出窗口 询问我在哪里上传文件
  • PowerShell 递归搜索名称包含“...”的文件和文件夹

    我需要帮助来创建一个可以挽救我生命的脚本 我的备份软件出错了 因为我错误地设计了备份计划 而且我有很多命名文件 文件名或文件夹名称 2 编码冲突 我想递归搜索我的网络共享以查找名称中带有 编码冲突 的文件夹和文件 然后首先导出它们以进行验证
  • Zookeeper运行在两个节点上

    我遇到过这样的情况 Zookeeper 配置为 2 个节点 但有时它开始同时在两个节点上运行 为什么会发生这种情况 要构建具有主从架构的整体 您需要拥有奇数个 Zookeeper 服务器 即 1 3 5 7 等 3 人的集成可以处理一台服务
  • AngularJS Post 请求在 Firefox 上无法正常工作

    我正在使用 AngularJS 编写一个网站 它与服务器上的 API 进行通信并提供一些信息 对于登录部分 我应该发送一个包含电子邮件 密码等的 http post 请求 它在 google Chrome 和 IE 上运行良好 我的意思是它
  • 从 Amazon S3 迁移到 Azure 存储(Django Web 应用程序)

    我维护这个 Django Web 应用程序 用户可以在其中聚集并互相聊天 如果他们愿意 他们也可以发布照片 我处理这些照片 即优化其大小 并将它们存储在 Amazon S3 存储桶 类似于 Azure 存储中的 容器 上 为此 我在 Ama
  • 在 shell 脚本中读取 JSON 数据[重复]

    这个问题在这里已经有答案了 在 shell 中 我有一个要求 其中我必须读取以下格式的 JSON 响应 Messages Body 172 16 1 42 home 480 1234 5 12 2013 1234 toSort Receip
  • R 中的约束线性回归系数[重复]

    这个问题在这里已经有答案了 我正在估计 R 中的几个普通最小二乘线性回归 我想限制回归中的估计系数 使它们相同 例如 我有以下内容 z1 x y z2 x y 我希望第一个回归中 y 的估计系数等于第二个回归中 x 的估计系数 有没有直接的
  • 为什么我的 http://schema.org/BreadcrumbList 未验证?

    我在我的网站上使用 schema org 微数据 但我正在努力解决面包屑列表作为谷歌的结构化数据测试工具不会验证它 它看起来是正确的 我看不出有什么问题 您可以单击上面的链接来查看错误 但总而言之 Google 表示每个项目的 itemty
  • 是否可以更新本地化故事板的字符串?

    我通过创建一个 base lproj 故事板和 3 个字符串文件来本地化我的应用程序的一部分 那是一个月前 之后我向应用程序添加了新的视图控制器 但该控制器的按钮和标签没有出现在字符串文件中 是否可以更新这 3 个情节提要附加的字符串文件
  • 在循环中绑定单击事件处理程序会导致 jQuery 出现问题

    我正在尝试运行以下代码 我将参数传递给函数 但它始终具有循环中运行的最后一个对象的值 我在 stackoverflow 上阅读了一些有关它的文章 但我找不到如何使其在我的解决方案中运行 该对象是从服务器返回的 JSON 对象 它的所有值都是
  • bootstrap自定义发生了什么?

    Bootstrap 3 曾经有这个自定义选项 https getbootstrap com docs 3 3 customize 但是 我无法找到 Bootstrap 4 的此类链接 我只是构建一个简单的网站 并且肯定不会使用它 80 的功
  • 使用 tfslim 解码 tfrecord

    我在 CPU 上使用 Python 2 7 13 和 Tensorflow 1 3 0 我想使用 DensNet https github com pudae tensorflow densenet 来解决回归问题 我的数据包含 60000
  • Android:使用 ImageView 显示 sdcard 中的 .jpg 图像

    我正在尝试将 SD 卡中的 jpg 显示到布局中的图像视图中 我没有收到任何错误 但没有显示任何内容 我将不胜感激任何帮助 谢谢 EDIT layout1 LinearLayout findViewById R id layout1Acti
  • 使用 NAudio 在指定位置应用线性淡入淡出

    我正在利用NAudio在我编写的 C 程序中 我想要在某个位置应用线性淡入淡出在我正在使用的一段音频中 在 NAudio 示例项目中有一个名为 FadeInOutSampleProvider cs 的文件 缓存示例 其中有BeginFade
  • flutter windows应用程序启动时如何启动其他应用程序(go服务)?

    我编写了一个flutter windows应用程序 我想在windows上启动flutter应用程序时启动golang服务 以及如何以管理员权限在windows上运行flutter应用程序 在运行程序目录中设置 CmakeLists txt
  • ASP.NET Core API 如何在操作方法中将 ActionResult 转换为 T

    作为示例 请看下面的 API 操作代码 HttpGet send public ActionResult
  • std::async 与 std::unique 无法编译

    include
  • 在 iOS 8 中打开从 Web 应用程序到新 Safari 窗口的链接

    更新 07 14 15 失去所有希望 我假设我的修复将与 javascript 相关 但我根本不知道 我当前的代码是否会阻止 HTML target Blanks 工作 我正在制作一个可在 iPad Mini 上下载的 HTML CSS 应
  • 在基准测试时防止编译器优化

    我最近看到了这个精彩的 cpp2015 演讲CppCon 2015 Chandler Carruth 调整 C 基准 CPU 和编译器 天哪 提到的防止编译器优化代码的技术之一是使用以下函数 static void escape void
  • 如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?

    序幕 这是SO中经常出现的一个问题 Django 模型分组依据 Django 相当于 count 和 group by 如何在 django 中进行 GROUP BY 查询 如何使用 ORM 进行相当于 SQL 计数 分组和连接查询 我已经