当前位置: 首页 > 面试题库 >

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

韩高峯
2023-03-14
问题内容

我已经编写了一个关于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或者一个GROUP BY ... SUM在Django的ORM SQL的等效查询,使用的annotate()values()django.db.modelsCountSum尊敬和可选的方法order_by()方法:

GROUP BY … COUNT:

from django.db.models import Count

result = Books.objects.values('author')
                      .order_by('author')
                      .annotate(count=Count('author'))

现在结果包含具有两个键的字典:authorcount

  author    | count
------------|-------
 OneAuthor  |   5
OtherAuthor |   2
   ...      |  ...

|
GROUP BY … SUM:

from django.db.models import Sum

 result = Books.objects.values('author')
                       .order_by('author')
                       .annotate(total_price=Sum('price'))

现在结果包含一个包含两列的字典:author和total_price:

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


 类似资料:
  • 问题内容: 1> 套装2排 2> 套装2排 3> 一组1行 为什么查询方式1>和2>会得到相同的结果?count(*)和count(somefiled)之间没有什么区别? 另外,查询2>和3>导致的结果不同,为什么 groupby 如此神奇?它是如何工作的? 更新:我正在使用MySQL5.1。:) 问题答案: 选择会给您一个结果集。如果按字段分组选择,则结果集的行将按该字段分组,并且结果集的每一行

  • 我的查询如下: 我得到一个错误“意外的'*'”。在第6行,请让我知道,如何重写或更正这个问题 谢谢,去吧

  • 问题内容: 我有一个这样的数据框说 和会话和收入的每个值代表了一种类型的,我要统计每个种类的数量表示的数量和的为1。 在无法输出所需结果后,我发现简单的调用函数。 我怎样才能做到这一点? 问题答案: 您似乎想一次按几列分组: 应该给你你想要的

  • 在https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html我们了解到: 以上代码显示了我们如何为t恤添加aggs,但我们如何做到: 和

  • 我希望在编译任何子项目之前先执行protobuf任务,因为我的子项目依赖于从protobuf任务生成的java文件。那么我怎样才能做到这一点呢?我不想在每个子项目中都有protobuf任务,相反,我只想在根项目中同时完成它,但在编译子项目之前。

  • 本文向大家介绍Select count(*)、Count(1)和Count(列)的区别及执行方式,包括了Select count(*)、Count(1)和Count(列)的区别及执行方式的使用技巧和注意事项,需要的朋友参考一下     在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作