首页 > 解决方案 > 基于 MIN 标志聚合行

问题描述

我认为这是一个简单的,但答案是逃避我。

示例:我有一个返回 10 行的查询,其中一些是相同的,除了最后 2 列是注释和数字(语言标志)。我想知道如何始终为这些半相同的行中的每一个返回具有最低语言标志号的行。

我一直假设这个想法是 MIN(language-flag),但是这需要的分组过程使查询仍然返回 2 行,因为评论内容不同。

我创建的示例图像在这里:

例子

任何帮助表示赞赏。

跟进问题:

在混乱中我忘记了为什么我最初需要问这个问题。

如果comments 字段恰好为null,当有相同的COL2 具有更高的lang-flag 时,那应该是选定的行,如果没有更高的lang-flag 行并且comments 字段为null,那么只有空注释应该选择行。

我为此案例创建了另一个示例图像:

在此处输入图像描述

标签: sqloracle

解决方案


您可以使用在具有相同 的记录组内对记录rank()进行排名,然后过滤掉每组的顶部记录:lang_flag(col1, col2)

select col1, col2, comments, lang_flag
from (
    select 
        t.*,
        rank() over(partition by col1, col2 order by lang_flag) rn
    from mytable t
) x
where rn = 1

推荐阅读