首页 > 其他分享 >在 django 中使用窗口函数

在 django 中使用窗口函数

时间:2024-06-05 14:55:02浏览次数:17  
标签:窗口 函数 RowNumber django cte Window import rn

问题

通过 django ORM 实现如下写法的 SQL 语句:

select *, row_number() over (partition by c1 order by c2 desc) as rn from my_table

实现

from django.db.models import F, Window
from django.db.models.functions import Rank, RowNumber

MyModel.objects.annotate(rn=Window(expression=RowNumber(), partition_by=[F('c1')], order_by=F('c2').desc()))

扩展

如果需要对 rn 列筛选,比如:

with my_rownumber_table as (
	select t.*, row_number() over (partition by c1 order by c2 desc) as rn from my_table t
)
select * from my_rownumber_table where rn = 1;

可以借助三方库 django-cte,语法如下:

from django.db.models import F, Window
from django.db.models.functions import Rank, RowNumber
from django_cte import With

cte = With(
    MyModel.objects.annotate(rn=Window(expression=RowNumber(), partition_by=[F('c1')], order_by=F('c2').desc()))
)

cte.queryset().with_cte(cte).filter(rn=1)

参考

  1. python - Django ORM: window function with subsequent filtering - Stack Overflow
  2. Common Table Expressions with Django | django-cte

标签:窗口,函数,RowNumber,django,cte,Window,import,rn
From: https://www.cnblogs.com/kingron/p/18233047

相关文章

  • c函数堆栈
    使用反汇编分析代码1.无参数无返回值voidfun1(){}intmain(intargc,char*argv[]){ fun1(); return0;}反汇编分析2.有参无返回值代码voidfun2(intx,inty){ x+y;}intmain(intargc,char*argv[]){ fun2(1,2); return0;}返汇编分析3.无参......
  • 【C++小知识】为什么C语言不支持函数重载,而C++支持
    为什么C语言不支持函数重载,而C++支持编译链接过程函数名修饰过程总结在了解C++函数重载前,如果对文件的编译与链接不太了解。可以看看我之前的一篇文章,链接:文件的编译链接想要清楚为什么C语言不支持函数重载而C++支持,有俩个过程:1.编译链接。2.函数名修饰过程。编译......
  • Python2 input函数漏洞利用
    在Python2中,input函数相当于eval(raw_input(prompt))如果输入的数据是一个恶意的表达式,存在任意代码执行的风险实例演示字符串拼接命令执行__import__('os').system('cat/etc/passwd')靶场利用在vulnhubbottleneck靶机中,遇到input漏洞利用的情况#核心......
  • 语法-字符串功能函数
    //C++标凇库提供了丰富的字符串操作函数,下面介绍一些常用的函数。//备注:位置可以看成是字符串的下标,从0开始//获取字符串长度//使用length或size函数来获取字符串的长度。#include<iostream>#include<string>#include<algorithm>#include<cctype>usingnamesp......
  • Wgpu图文详解(01)窗口与基本渲染
    写在前面如果对Rust与Wgpu比较关注的同学可能在网络上搜到过@sotrh国外大佬编写的《LearnWgpu》,以及国内大佬@jinleili的优秀翻译作品《学习Wgpu》。这些学习教程质量很高,在我学习Wgpu的过程中给了很大的帮助。那为什么还有我这个系列的文章呢?首先,大佬的系列目前winit使用0.29.......
  • Qt学习第四篇(主窗口和ui的使用)
    QMainWindowQMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menubar)、多个工具栏(toolbars)、多个停靠部件(dockwidgets)、一个状态栏(statusbar)及一个中心部件(centralwidget),是许多应用程序的基础,如文本编辑器,图片编辑器等。菜单栏一个主窗口最多只有一个菜......
  • Web前端 函数
    函数函数是一段可以反复调用的代码块函数的声明function命令:function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。functionprint(s){ console.logs(s);}函数名的提升JavaScr......
  • 【sklearn中LinearRegression,logisticregression函数及其参数】
    文章目录前言一、sklearn中的LinearRegression1.引入库2.LinearRegression的主要参数及其解释3.LinearRegression的使用步骤(1)生成模拟数据(2)创建并训练模型(3)预测与评估二、sklearn中的LogisticRegression1.引入库2.LogisticRegression的主要参数及其解释3......
  • 函数图形绘制
    importmatplotlib.pyplotaspltimportnumpyasnpx=np.arange(0,10,0.0001)y1=x**2y2=np.cos(x*2)y3=y1*y2plt.plot(x,y1,linestyle='-.')plt.plot(x,y2,linestyle=':')plt.plot(x,y3,linestyle='--')plt.savef......
  • 每天5分钟教你用Django构建一个管理系统》第一篇:登录注册
    《每天5分钟教你用Django构建一个管理系统》第一篇:登录注册引言欢迎来到这个系列教程的第一篇——我们将每天花费5分钟,逐步构建一个功能完备的Web管理系统。在这个过程中,我们会从基础开始,深入到更高级的概念。今天我们将从登录和注册功能入手,这是任何管理系统的核心部分。......