Select 有优先顺序

Select with priority order

这是我的 table, CAR :

+------+--------+---------+
| id   | model  | color   |
+------+--------+---------+
| 1    | bmw    | blue    |
| 2    | bmw    | red     |
| 3    | bmw    | null    |
| 4    | porsche| null    |
| 5    | porsche| red     |
| 6    | vw     | orange  |
| 7    | car    | null    |
+------+-------+----------+

如何 select 所有具有此颜色优先级的不同模型:

  1. blue
  2. red
  3. null或其他颜色...

?

查询的结果应该是这样的:

+------+--------+
| id   | model  |
+------+--------+
| 1    | bmw    |
| 5    | porsche|
| 6    | vw     |
| 7    | car    |
+------+--------+

您可以使用 row_number() 分析函数设置颜色顺序,然后在 row_number = 1:

上进行过滤
with car as (select 1 id, 'bmw' model, 'blue' colour from dual union all
             select 2 id, 'bmw' model, 'red' colour from dual union all
             select 3 id, 'bmw' model, null colour from dual union all
             select 4 id, 'porsche' model, null colour from dual union all
             select 5 id, 'porsche' model, 'red' colour from dual union all
             select 6 id, 'vw' model, 'orange' colour from dual union all
             select 7 id, 'car' model, null colour from dual union all
             select 8 id, 'vw' model, 'purple' colour from dual)
select id,
       model
from   (select id,
               model,
               colour,
               row_number() over (partition by model 
                                  order by decode(colour, 'blue', 1, 'red', 2, 3), colour) rn
        from   car)
where  rn = 1
order by id;

    ID MODEL  
---------- -------
         1 bmw    
         5 porsche
         6 vw     
         7 car