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 所有具有此颜色优先级的不同模型:
blue
red
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
这是我的 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 所有具有此颜色优先级的不同模型:
blue
red
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