Django 和 Postgres - 百分位数(中位数)和分组依据

2023-11-26

我需要计算每个卖家 ID 的期间中位数(参见下面的简化模型)。问题是我无法构建 ORM 查询。

Model

class MyModel:
    period = models.IntegerField(null=True, default=None)
    seller_ids = ArrayField(models.IntegerField(), default=list)
    aux = JSONField(default=dict)

Query

queryset = (
    MyModel.objects.filter(period=25)
    .annotate(seller_id=Func(F("seller_ids"), function="unnest"))
    .values("seller_id")
    .annotate(
        duration=Cast(KeyTextTransform("duration", "aux"), IntegerField()),
        median=Func(
            F("duration"),
            function="percentile_cont",
            template="%(function)s(0.5) WITHIN GROUP (ORDER BY %(expressions)s)",
        ),
    )
    .values("median", "seller_id")
)

ArrayField 聚合 (seller_id) source


我认为我需要做的是以下几行

select t.*, p_25, p_75
from t join
     (select district,
             percentile_cont(0.25) within group (order by sales) as p_25,
             percentile_cont(0.75) within group (order by sales) as p_75
      from t
      group by district
     ) td
     on t.district = td.district

上面的例子源码


Python 3.7.5、Django 2.2.8、Postgres 11.1


您可以创建一个Median的儿童班Aggregate瑞安·墨菲(Ryan Murphy)所做的课程(https://gist.github.com/rdmurphy/3f73c7b1826cacee34f6c2a855b12e2e). Median然后就像Avg:

    from django.db.models import Aggregate, FloatField


    class Median(Aggregate):
        function = 'PERCENTILE_CONT'
        name = 'median'
        output_field = FloatField()
        template = '%(function)s(0.5) WITHIN GROUP (ORDER BY %(expressions)s)'

然后找到一个字段的中位数使用

    my_model_aggregate = MyModel.objects.all().aggregate(Median('period'))

然后可以作为my_model_aggregate['period__median'].

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

Django 和 Postgres - 百分位数(中位数)和分组依据 的相关文章

随机推荐

  • Android Toast 通知在冰淇淋三明治中太小 [重复]

    这个问题在这里已经有答案了 有人对冰淇淋三明治中的吐司通知太小有任何问题吗 在我的应用程序中 通知在所有其他版本上看起来都很好 然而 在冰淇淋三明治中 它的尺寸却小得令人难以置信 起初我以为这可能是我的自定义主题 但禁用它后 我看到了相同的
  • 将数据库保存在外部硬盘上

    我正在使用 PostgreSQL 创建一些数据库 但由于我的计算机内存不足 我想将它们保存在外部硬盘上 我怎样才能做到这一点 您可以将数据库存储在另一个磁盘上 方法是将其指定为data directory环境 您需要在启动时指定它 它将适用
  • 在设计 JS 库时,我应该使其兼容 RequireJS/AMD 还是不兼容?

    如果我正在制作一个通用的 JavaScript 库 我应该如何处理 RequireJS 支持 据我所知 让你的代码或多或少地兼容 RequireJS 会让你的代码在没有 RequireJS 的情况下无法使用 那我为什么要这么做呢 没有 Re
  • omu.valueinjecter 深度克隆与类型不同

    我认为我缺少一个关于 valueinjecter 和 或 AutoMapper 的简单概念 但是如何将父级 dto Entity 深度克隆到 biz Entity 并包含所有子级 例如 biz person InjectFrom dto p
  • 如何创建 NodeJS 模块?

    我已阅读 NodeJS 网站上的详细信息 https nodejs org api modules html 我不明白模块是如何工作的 创建模块的最少步骤是什么 以及 npm 如何帮助我 如何创建模块 我如何使用模块 把它放在 npm 上是
  • 如何在 UIDatePicker 中仅禁用日期选择而不是时间选择

    我在我的应用程序中使用 UIDatePicker 我想仅禁用其中的日期选择 并且时间选择不应受到影响 谁能帮我这个 Set the datePickerMode to UIDatePickerModeTime
  • 使用与密钥相同的字符串加密字符串是否安全?

    在 CBC 模式下使用 AES 并使用 IV 当然 对给定密钥本身进行加密是否存在任何安全缺点 遵循以下原则 密钥是秘密的 IV 是公开的 因为这不会影响加密的安全性 然而 潜在的攻击者将会知道 因为他可以访问源代码 该字符串使用其自身作为
  • 具有相机意图和图像选择器意图的选择器

    我创建了一个选择器 用于从文件中选择图像或制作图片 我使用的代码在 Nexus 5 上运行良好 但是当我在 Samsung S5 上尝试时 选择器不显示相机图标 public Intent makePhotoIntent String ti
  • docker 互联网连接 iptables=false

    我放弃 我在 ubuntu 16 04 下使用 Docker 1 12 0 并使用 UFW 进行强化 该机器有 2 个接口 一个公共 eth0 和一个专用网络 eth1 Server Version 1 12 3 Storage Drive
  • 如何仅使用 CSS 获得悬停效果

    我已经得到了圆圈部分 我在 div 上设置了黑色的背景颜色 对于文本 我设置了 a hover 作为显示的颜色 我只是不知道如何为 div 设置 a hover 以及仅针对该周长 这是我的代码 HTML a class cirlink hr
  • 静态成员的两个实例,怎么可能?

    我有一个多线程应用程序 我在共享库中声明一个具有静态成员的类 从不同库的不同线程打印成员的地址会显示不同的结果 宣言 template
  • 指令在 ng-repeat 绑定的 内不起作用

    我有一个表 其中的行通过重复ng repeat 我正在尝试创建一个生成列的模板 td 对于每一行 tr app directive customtd function return restrict E template td positi
  • 来自 AngularJS Get for JSON 的 HTTP 状态 0

    我正在为 JSON 运行 http get 并且状态为 0 我已经下载了相同的 JSON 并且 get 在本地工作 并且在 Python 中使用请求库我可以毫无问题地获取 JSON 但是在AngularJS 不起作用 我不明白的是为什么 A
  • 在 macOS 的 SwiftUI 中更改 TextEditor 背景颜色

    我想更改 macOS 上 SwiftUI 文本编辑器的背景颜色 下面的代码 用于 iOS 是否有一个变体适用于 NSTextField 而不是 UITextView Thanks struct ContentView View init U
  • 社交网络应用程序数据库设计:如何改进此架构?

    背景 我正在为诗人和作家开发一款社交网络应用程序 让他们能够分享诗歌 收集反馈并与其他诗人交流 我很少接受过数据库设计方面的正式培训 但我一直在阅读书籍 SO 和在线数据库设计资源 试图在不过度设计的情况下确保性能和可扩展性 数据库是MyS
  • 复杂数据类型的 Typedef

    我试图从语法的角度理解 C 如何处理复杂 typedef 的底层机制 请考虑下面的示例 问题末尾包含参考文献 typedef int p1d 10 是正确的声明 即 p1d 这里是指向数组的指针 10 个整数 就像使用 Array 类型声明
  • Angular 2 下载文件:结果损坏

    我正在尝试使用 Angular 2 TypeScript 和 Web API 下载文件 我遇到的问题是 当下载文本文件时 该文件是文件 但是当尝试下载 PDF 文件时 例如 它已损坏 下载的文件内容都是乱码废话 我使用的 TypeScrip
  • 如何在 Python 中存储变量/首选项以供以后使用

    我正在用 Python 编写 Windows 程序 并且希望保存变量和用户首选项 以便即使在程序终止并重新启动后我也可以调用它们 有没有在 Windows 机器上执行此操作的理想方法 会 winregWindows 注册表适合这项任务吗 或
  • C++ 运算符重载的多态性

    如何使纯虚函数成为运算符 功能 我在基课上喜欢这个吗 int运算符 0 编译器给出错误 在派生类中operator 函数 编译器说派生类不能 make 因为下面的类是抽象的 我知道我无法创建抽象类的对象 但现在我尝试创建派生类对象 这是代码
  • Django 和 Postgres - 百分位数(中位数)和分组依据

    我需要计算每个卖家 ID 的期间中位数 参见下面的简化模型 问题是我无法构建 ORM 查询 Model class MyModel period models IntegerField null True default None sell