Django ORM 在注释多个聚合列时删除不需要的 Group by

2023-11-26

我想在 django ORM 中创建一个类似这样的查询。

SELECT COUNT(CASE WHEN myCondition THEN 1 ELSE NULL end) as numyear
FROM myTable

以下是我编写的 djang ORM 查询

year_case = Case(When(added_on__year = today.year, then=1), output_field=IntegerField())

qs = (ProfaneContent.objects
                    .annotate(numyear=Count(year_case))
                    .values('numyear'))

这是由 django orm 生成的查询。

SELECT COUNT(CASE WHEN "analyzer_profanecontent"."added_on" BETWEEN 2020-01-01 00:00:00+00:00 AND 2020-12-31 23:59:59.999999+00:00 THEN 1 ELSE NULL END) AS "numyear" FROM "analyzer_profanecontent" GROUP BY "analyzer_profanecontent"."id"

其他一切都很好,但 django 放置了一个GROUP BY最后导致多行和错误的答案。我根本不想这样。现在只有一列,但我会放置更多这样的列。

根据评论进行编辑我将使用 qs 变量来获取当前年、月、周的分类值。

UPDATE根据我来到这里的评论和答案,让我澄清一下。我只想在数据库端执行此操作(显然使用 Django ORM 而不是 RAW SQL)。这是一个简单的sql查询。在 Python 端做任何事情都会效率低下,因为数据可能太大。这就是为什么我希望数据库根据 CASE 条件获取记录总和。 我将来会添加更多这样的列,因此像 len() 或 .count 这样的列将不起作用。

我只想使用 Django ORM 创建上述查询(没有自动附加的 GROUP BY)。


在注释中使用聚合时,django 需要进行某种分组,如果没有则默认为主键。所以,你需要使用.values() before .annotate(). 请参阅 django 文档.

但是要完全删除 group by ,您可以使用静态值,并且 django 足够聪明,可以完全删除它,因此您可以使用 ORM 查询获得结果,如下所示:

year_case = Case(When(added_on__year = today.year, then=1), output_field=IntegerField())

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

Django ORM 在注释多个聚合列时删除不需要的 Group by 的相关文章

随机推荐

  • 列表视图有多个分割按钮吗?

    基于 JQuery Mobile 的示例拆分按钮列表我正在尝试在 Android 中生成一个列表视图组件 右侧有两个额外的按钮 一个紧挨着另一个 问题在于该代码仅生成一个按钮 第二个按钮作为当前项目的链接添加 这是我的代码 ul li a
  • 什么是控制字符的正则表达式?

    我试图匹配 c 形式的控制字符 其中 c 是控制字符的任何有效字符 我有这个正则表达式 但它当前不起作用 z 我认为问题在于插入符 是正则表达式解析引擎的一部分 匹配以下形式的 ASCII 文本字符串 X使用模式 仅此而已 匹配以下形式的
  • 如何将自己从事件处理程序中删除?

    我想做的基本上是从事件中删除函数 而不知道函数的名称 我有一个FileSystemWatcher 如果创建 重命名文件 它会检查其名称 如果匹配 则会将其移动到特定位置 但是 如果文件被锁定 它会生成一个附加到计时器的滴答事件的 lambd
  • 通过 TCP 连接发送大文件

    我需要通过互联网将一些大文件发送到计算机 结果我打开了路由器上打算使用的端口并转发相应的IP地址 无论如何 让我向您展示我为了实现这一目标而一直在努力的课程 这些类对于小文件工作得很好 但有时对于大文件则失败 这是服务器的代码 它是一个控制
  • 如果 getc() 通过 SIGINT 退出,则 getc() 后面的未定义行为是否会改变程序行为

    根据 未定义行为 的现代解释 编译器有权假设不会发生导致未定义行为 不可避免 的事件链 并且可以消除仅适用于代码将要执行的情况的代码未定义的行为 这可能会导致未定义行为的影响及时倒退 并使本来可以观察到的行为无效 另一方面 如果除非程序终止
  • 使用 Windows 身份验证的 Intranet 应用程序是否需要 ASP.NET Core Identity

    在 Intranet Web 应用程序中使用 Windows 身份验证我想实现以下目标 从 AD 收集其他属性 姓名 员工编号 从数据库表中收集其他属性 工作时间 工资 根据应用程序角色 而不是 AD 组 进行授权 基于 AD 属性授权 有
  • Draw.io——是否有未缩小的源代码?

    我们正在尝试使用最新的 Draw io 存储库 并修改 javascript 客户端代码以更改其某些行为以改进用户体验 但是 我们能找到的唯一最新来源是这里 https github com jgraph draw io tree mast
  • fstream 读/写是否移动文件指针

    这是一个我希望能够轻松回答的简单问题 文件流读写操作是否会移动指针 举个例子 cpos 10000 for i 0 i lt 20 i dataFile seekg cpos i ios beg dataFile read carray i
  • 何时使用虚拟析构函数?

    我对大多数都有深入的了解OOP理论 但让我很困惑的一件事是虚拟析构函数 我认为无论如何 对于链中的每个对象 析构函数总是被调用 您打算什么时候将它们虚拟化 为什么 当您可能通过指向基类的指针删除派生类的实例时 虚拟析构函数非常有用 clas
  • ggvis 中带有数字的热图

    我正在尝试使用 ggvis 中 ggplot2 中的数字复制热图 ggplot2版本是 library ggplot2 hec lt as data frame xtabs Freq Hair Eye HairEyeColor ggplot
  • 将第三方js文件导入到Angular TypeScript项目中

    在我使用 Angular 的经历中 我被迫使用四种不同的方式来包含第 3 方库poliglot js 对于多语言 所以能够使用new Polyglot 在我的朗课上 export class Lang constructor this po
  • iPhone/iPad 上的 PDF 超链接

    我一直在浏览谷歌和SO 但还没有找到我的问题的答案 或者至少没有找到更新的答案 我有一个包含超链接 热点的 PDF 并且想在我自己的 iPhone iPad 应用程序中显示该 PDF 文件 当用户单击超链接 热点时 我希望将用户带到链接的适
  • JPA ManyToMany,JoinTable怎么会有属性?

    我有一个关于EJB中ManyToMany设计的问题 jointable如何拥有属性 举个例子 学生和课程都是ManyToMany 每个学生有很多门课程 很多学生选择一门课程 Entity public class Student imple
  • 聚焦时更改 mat-select-arrow 和 mat-select-underline

    到目前为止 我已经尝试了很多不同的事情 例如 deep mat select focus mat select trigger mat select arrow color 63961C deep mat select focus mat
  • 平滑这个 jQuery 切换动画吗?

    所制作的动画我的 jQuery 函数不稳定 我一直在寻找不同的 SO 解决方案 例如添加 jquery easing 但没有运气 问题是每个 div 中的 iframe 吗 关于如何平滑动画有什么想法吗 我的基本切换功能是最好的方法吗 JS
  • Codeigniter 4 - 如何显示404页面?

    这是一个非常愚蠢的问题 但我无法处理它 在 Codeigniter 3 中 我只是在任何控制器中使用 show 404 函数来显示 404 页面 我怎样才能用 Codeigniter 4 做同样的事情 我刚才正在寻找同样的东西 我在这里找到
  • Angular 2. 如何在 Observable 中使用重定向处理 4xx 错误?

    我有一个调用 api 的服务 getItems itemId number Observable
  • 在实体框架 6 中调用标量值函数

    如何在实体框架 6 中调用标量函数 我尝试过以下代码 using MhEntities DContext new MhEntities var Account IdParameter Account Id HasValue new Obje
  • PHP 取消链接不起作用

    我正在尝试使用 unlink 删除 php 中的照片 我之前在其他服务器上使用过它 但这次它不起作用 我已经使用绝对路径进行测试 但仍然不起作用 我把它用作 取消链接 img1 jpg and unlink http www mysite
  • Django ORM 在注释多个聚合列时删除不需要的 Group by

    我想在 django ORM 中创建一个类似这样的查询 SELECT COUNT CASE WHEN myCondition THEN 1 ELSE NULL end as numyear FROM myTable 以下是我编写的 djan