添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

先应明确聚合的定义:

https://blog.csdn.net/qq_27361945/article/details/83301762

但distinct()函数与聚合没有关系。

在django models中取得一个字段的distinct值

https://blog.csdn.net/tsbob/article/details/1340293

就是select distinct xxx  from table_name ...这样的功能

很简单,代码如下

xxxx.objects.values("field_name").distinct()
#或者
xxxx.objects.distinct().values("field_name")

这两句实际生成的sql都一样。django 的models框架,看起来算是半个O/R mapping框架,相比我以前也用过hibernate,功能并不差,

一开始我怀疑上面说的这点,因为看django文档原文写了:

When using values() together with distinct() , be aware that ordering(注:不是指 values()与 distinct()的顺序,而是排序order_by() ) can affect the results. See the note in distinct() fordetails.

https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values

The moral here is that if you are using distinct() be careful about ordering by related models. Similarly, when using distinct() and values() together, be careful when ordering by fields not in the values() call.

—— https://docs.djangoproject.com/en/1.11/ref/models/querysets/#distinct

实际上,因为英语水平有限,我没看出来这两个地方讲的不完全是 distinct() values() 两者的关系,而是 distinct() values() order_by() 三者的关系,

大意是:当同时使用distinct()和values()时,排序(ordering)将会对结果产生影响。其实主要是distinct()与order_by()之间互相影响。

我在django文档原文中,没有找到文字直接说明distinct()与values()在链式调用中的顺序是否影响查询结果。找到下面一段话,大意是 filter() , order_by() 链式调用的顺序不影响结果,这里只提了 filter() , order_by(),等,请注意“等”字,我猜可能包括 distinct()函数:

Finally, note that you can call filter() , order_by() , etc. after the values() call, that means that these two calls are identical:

Blog.objects.values().order_by('id')
Blog.objects.order_by('id').values()

The people who made Django prefer to put all the SQL-affecting methods first,followed (optionally) by any output-affecting methods (such as values()),but it doesn’t really matter. This is your chance to really flaunt your individualism.

在第一句话中,原文举了两个例子filter(), order_by(),etc,这两个函数与values()共同使用时,顺序不分先后。后来注意到,原文中的etc是等等的意思,我猜想:distinct()就应该属于“等等”中的一个。

先应明确聚合的定义:https://blog.csdn.net/qq_27361945/article/details/83301762但distinct()函数与聚合没有关系。在django models中取得一个字段的distinct值https://blog.csdn.net/tsbob/article/details/1340293 就是select distinc... 首先,看下列代码: UserData.objects.filter(hubid=sensorid,time__range=(time2,time1)).values(‘hour’).annotate(sum_out=Sum(‘outdoor’), sum_in=Sum(‘indoor’), sum_eat=Sum(‘kitchen’), sum_wash=Sum(‘toilet’)).order_by(‘hour’) 上述代码相当于sql语句: select Sum(‘outdoor’) as sum_out,Sum(‘indoor from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __str__(self): # __unic... 1.values()结果是什么? 官方文档说明:https://docs.djangoproject.com/en/2.1/ref/models/querysets/#django.db.models.query.QuerySet.values 结果:values()得到的是一个字典形式的查询集(QuerySet),查询集是一个可迭代对象。 2.valu... class Author(models.Model): name = models.CharField(max_length=100) email = models.EmailField() def __str__(self): return self.name class Book(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE) published_date = models.DateField() def __str__(self): return self.title 这个示例包括两个 models:Author 和 Book。Author 模型包括一个名字和电子邮件字段,而 Book 模型包括一个标题、作者和出版日期字段。Book 模型使用外键关联到 Author 模型。在这个示例中,我们还定义了每个模型的 __str__ 方法,以便在调试和其他情况下使用