我已经编写了一个关于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.models
的Count
和Sum
尊敬和可选的方法order_by()
方法:
GROUP BY … COUNT:
from django.db.models import Count
result = Books.objects.values('author')
.order_by('author')
.annotate(count=Count('author'))
现在结果包含具有两个键的字典:author
和count
:
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([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作