это будет делать:
select * from (select a.*,rank() over (partition by colour order by price desc) rk from
tableaname a) where rk<6;
скорее это:
CREATE VIEW view_name AS select * from (select a.*,rank() over (partition
by colour order by price desc) rk from
tableaname a) where rk<6;