SQL

如何根据另一行中的优先级值选择一行?

发布于 2021-05-20 11:05:57

我正在使用Oracle 11G,并且我有一个包含以下列和值的表,并且我想根据优先级列为每个列选择值。每个ID只需要一行。

ID    NAME   NAME_PRIORITY   COLOR   COLOR_PRIORITY
1     SAM       2             RED          1
1     SAM       2             GREEN        2
1     JOHN      1             BLUE         3
2     MARY      2             ORANGE       1
3     JON       2             RED          2
3     PETE      3             GREEN        1

所需结果

ID   NAME    NAME_PRIORITY   COLOR     COLOR_PRIORITY
1    JOHN       1             RED           1
2    MARY       2             ORANGE        1
3    JON        2             GREEN         1

如何选择优先级最低的名称和颜色,每个ID仅包含一行。

关注者
0
被浏览
60
1 个回答
  • 面试哥
    面试哥 2021-05-20
    为面试而生,有面试问题,就找面试哥。

    一种选择是:

    select d.id, min(name) keep (dense_rank first order by name_priority) name,
           min(name_priority) name_priority,
           min(color) keep (dense_rank first order by color_priority) color,
           min(color_priority) color_priority
      from yourtab d
     group by id;
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看