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

如何通过Django进行分组和汇总

简嘉赐
2023-03-14
问题内容

我想通过ORM进行一个非常简单的查询,但无法弄清楚。

我有三种模式:

位置(位置),属性(位置可能具有的属性)和评分(也包含得分字段的M2M“直通”模型

我想选择一些重要的属性,并能够通过这些属性对我的位置进行排名-即,所有选定属性的总分更高=更好。

我可以使用以下SQL来获取所需的内容:

select location_id, sum(score) 
    from locations_rating 
    where attribute_id in (1,2,3) 
    group by location_id order by sum desc;

哪个返回

 location_id | sum 
-------------+-----
          21 |  12
           3 |  11

|
我可以通过ORM得到的最接近的是:

Rating.objects.filter(
    attribute__in=attributes).annotate(
    acount=Count('location')).aggregate(Sum('score'))

哪个返回

{'score__sum': 23}

即所有的总和,而不是按位置分组。

可以解决吗?我可以手动执行SQL,但宁愿通过ORM保持一致。

谢谢


问题答案:

尝试这个:

Rating.objects.filter(attribute__in=attributes) \
    .values('location') \
    .annotate(score = Sum('score')) \
    .order_by('-score')


 类似资料:
  • 问题内容: 有谁知道(如果可能的话,也用破折号)通过对象键对对象数组进行分组然后根据分组创建新的对象数组的方法吗?例如,我有一系列汽车对象: 我想制作一组新的汽车对象,并按以下类别分组: 问题答案: 。简单,并允许在分组结构中的对象中进行一些重复。 但是,OP还要求删除重复的密钥。如果您想一路走下去: 产量: 如果您想使用Underscore.js进行此操作,请注意,其版本称为。

  • 我的模式实现受到了mongo官方网站上这篇教程的影响 这基本上是为时间序列数据设计的模式,我将每个设备每小时的数据存储在单个文档中的数组中。我创建字段组合发送数据和时间的设备id。例如,如果id为的设备在发送数据,则我的 字段将变为

  • 我正在寻找一种公式/方法来衡量一条指令的速度,或者更具体地说,按CPU周期给每条指令一个“分数”。 以下面的汇编程序为例, 以及以下Intel Skylake信息: mov r,m:吞吐量=0.5延迟=2 Mov m, r:吞吐量=1延迟=2 nop:吞吐量=0.25延迟=非 inc:吞吐量=0.25延迟=1 我知道程序中的指令顺序在这里很重要,但我希望创建一些不需要“精确到单个周期”的通用指令

  • 我有app,我有很多不同风格的按钮组件(我特意把它分开,以提高可读性),例如:普通、概述、文本、链接和其他。我想创建一个特殊的组件,在其中我将传递prop,component将返回我需要的按钮组件。现在我制作了这个组件,但我必须传递我可能不需要的道具。我如何解决这个问题,或者你知道分组的不同实现方式? 分组组件:

  •         目前只有电脑端能进行好友分组,移动端只能同步电脑端好友分组情况,并显示分组详细信息,暂不支持好友分组功能。 1)进入我的好友列表,新增分组 2)对分组列表进行重命名、删除操作。 3)对分组下的成员进行移动分组操作。