我有以下数据MAX聚合
GROUP_ID INDEX
NULL 1
1 2
NULL 3
1 4
NULL 5
2 6
2 7
我想要的是得到一个包含字段:
- 如果GROUP_ID IS NOT NULL,该组中最小的指数
- 如果group_id为NULL,则来自该行的索引
以上示例的结果数据集为:
GROUP_ID INDEX GROUP_INDEX_MIN
NULL 1 1
1 2 2
NULL 3 3
1 4 2
NULL 5 5
2 6 6
2 7 6
在Oracle我会用(CASE WHEN group_id IS NOT NULL THEN MIN(index) OVER (PARTITION BY group_id) ELSE group_id END)
解决这个问题,但由于MySQL不支持,我真的不知道如何进行:)我可以通过为每个检索最小值的子查询解决这个小组,然后离开加入,但我认为必须有一个更优雅的解决方案。
如果您需要更多信息,请询问。 谢谢。
在你的答案中,表格包含冗余的GROUP_INDEX_MIN重复。我建议修改这个设计。也许两个独立的查询会更好。 – Mikhail