【发布时间】:2019-02-24 13:50:36
【问题描述】:
我的目标是通过两个相互依赖的标准选择记录,然后按其他标准对其进行分组。
我找到了按单个条件选择记录并将其分组的解决方案
SELECT *
FROM "records"
NATURAL JOIN (
SELECT "group", min("priority1") AS "priority1"
FROM "records"
GROUP BY "group") AS "grouped"
我想我理解这个搜索的概念——选择你关心的属性并在原始表中匹配它们——但是当我将这个概念用于两个优先级时,我得到了这个怪物
SELECT *
FROM "records"
NATURAL JOIN (
SELECT *
FROM (
SELECT "group", "priority1", min("priority2") AS "priority2"
FROM "records"
GROUP BY "group", "priority1") AS "grouped2"
NATURAL JOIN (
SELECT "group", min("priority1") AS "priority1"
FROM "records"
NATURAL JOIN (
SELECT "group", "priority1", min("priority2") AS "priority2"
FROM "records"
GROUP BY "group", "priority1") AS "grouped2'"
GROUP BY "group") AS "GroupNested") AS "grouped1"
我要问的只是它不能写得更好(优化和看起来更好)吗?
----更新----
目标是我想通过priority1 为每个group 选择单个id,并且应该首先选择priority2,然后再选择优先级2)。
示例:
当我有表records 和id、group、priority1 和priority2
有数据:
id , group , priority1 , priority2
56 , 1 , 1 , 2
34 , 1 , 1 , 3
78 , 1 , 3 , 1
结果应该是56,1,1,2。对于每个组,首先搜索 min of priority1,然后搜索 min of priority2。
我尝试将 max 和 min 组合在一起(在一个查询中`,但它没有找到任何东西(我不再有这个查询)。
【问题讨论】:
-
请告诉我们您的查询背后的逻辑。此外,在您的问题中直接包含示例数据和预期输出。小提琴没有问题,但你的问题应该站在这里。
-
每个组的ID背后的逻辑是什么?
-
我用主要目标和示例数据更新了问题
-
NATURAL JOIN 会吓到很多人。
-
预期结果中的
id = 56来自哪里,它不在示例数据中?
标签: sql postgresql optimization