这是我的数据库的示例架构:
Priority | Productive | UnProductive | Neutral |
-------------------------------------------------
High | [1, 2] | [] | [4, 5] |
Medium | [3, 4] | [5, 7] | [2] |
Low | [1] | [2, 6] | [] |
注意:这些数字实际上是我数据库中的 UUID,在同一行中不会重复任何数字。
我想从 中取消嵌套类别productive
,unproductive
这样neutral
:
- 从 1 到 7 的数字都不重复,并且
- 如果该数字已被High Priority 捕获,它将不会被Medium捕获, Low也是如此。
预期输出:
Productive: [1, 2, 3] # no 4 because it have been captured by neutral High priority
UnProductive: [7, 6] # no 5 and 2 because it have been captured before
Neutral: [4, 5] # no 2 because it is caputed before
这可以伪装成每组最大 n问题。
DISTINCT ON
在取消嵌套之后和聚合回来之前,我的核心功能也是如此:要像原始表中那样生成一行:
或使用旋转结果:
db<>在这里摆弄
进一步阅读:
你没有在这个问题中提到性能。考虑一下您之前问题的答案:
我已经按照@Akina 的建议通过取消嵌套和分配权重来解决这个问题。
见https://dbfiddle.uk/?rdbms=postgres_13&fiddle=8a54e1f8018c49146faba3e446f7b694
它可能可以更有效地完成。