postgresql - 为 sqlalchemy/postgresql 中的数据库查询列表获取数组中唯一数字的频率
问题描述
我很难找到解决上述问题的方法。这是详细信息。
假设我们有一个包含不同产品的表 X,每个产品都有一个唯一的整数 id 和一个唯一的代码。我们还有 Table Y,其中包含 Table X 中每个产品的不同变体,它们在产品名称、长度、宽度等方面略有不同。因此在Table X和Table Y之间定义了一对多的关系。
前端显示所有这些产品变体,并允许从列表中选择它们并将所有选择的产品详细信息导出为 pdf。然而,选择它们有一种奇怪的方式,如果用户点击一个产品,那么如果它们在同一个列表中,那么所有具有相同唯一代码的产品变体都会被选中。 That is, basically whenever a product variant is selected, the full product gets selected along with all its variants in the list. 但是,如果用户愿意,他们可以根据需要单独取消选择每个产品变体。
表 Z包含导出的所有产品变体 ID 的日志。因此它看起来像这样
编号 | 导出_at | 导出方式 | product_variant_ids
1 | 一些日期时间 | 一些用户 | {1, 2, 3, 4}
2 | 一些日期时间 | 一些用户 | {3, 4}
3 | 一些日期时间 | 一些用户 | {6, 8, 9}
4 | 一些日期时间 | 一些用户 | {1, 6, 7}
5 | 一些日期时间 | 一些用户 | {3, 5, 7}
等等..
在这里您将观察到:
1. 在每一行上,一个产品变体 ID 在数组中只能出现一次
2. 但是,一个产品变体 ID 可以出现在不同的行
对于所有行中存在的每个唯一产品变体 ID,我想计算它们在每行中出现的频率的总和。
例如,在上面的虚拟表中,产品变体 id 1在整个表中恰好出现两次,分别在第 1 行和第 4 行。类似地,产品变体 id 3出现在第 1、2 和 5 行。
我试图天真地计算它,比如
朴素的算法:
从表中存在的所有唯一 ID 的集合中,
为每一行检查该集合中的每个唯一 ID 是否存在于每一行中
,并在每次出现时增加计数器。
我不知道如何为其编写子查询,因此,我无法在 postgres 控制台上尝试任何查询。
当使用像 SQLAlchemy 这样的 ORM 时,它会导致只有 15-20 条日志后的操作非常慢。
谁能引导我朝着正确的方向前进,什么可能是更有效的解决方案?
解决方案
推荐阅读
- node.js - “调用 Lambda 时出错:无法执行 HTTP 请求:读取超时”......对于一个简单的 POST 请求?
- cs50 - cs50x 2020 - pset2 - 替换 - 键中的重复字符
- sql - 从 Druid SQL 中的当前日期获取上一个日期
- vue.js - 将数据从子组件传递到父组件时,Vue 事件不起作用
- arrays - 在 SwiftUI 中访问数组中的元素时出现“致命错误:索引超出范围”
- javascript - React - 动态输出 SVG 组件
- javascript - 无法从 JSFiddle 向博主显示源代码
- c# - 无法使用反射访问受保护的属性
- tensorflow - TF 2.2 精度和召回率在训练和验证中总是返回零
- reactjs - React,渲染前调用函数