2016-11-10 7 views
-1

すべての都市で2台の最も高価な車を選択したいと思います。以下都市ごとに2台の最も高価な車を選択してください

DDL:

create table city_car 
(
    id bigserial, 
    city varchar(255), 
    car varchar(255), 
    price int, 
    primary key (id) 
); 

insert into city_car(city, car, price) 
values 
    ('los angeles', 'kia rio', 550), 
    ('los angeles', 'audi a4', 1800), 
    ('los angeles', 'lexus nx', 2000), 
    ('los angeles', 'chevrolet camaro', 2800), 
    ('los angeles', 'mazda 6', 1300), 
    ('moscow', 'mazda 3', 1000), 
    ('moscow', 'kia cerato', 1000), 
    ('moscow', 'lexus nx', 2100), 
    ('moscow', 'lexus lx', 5000), 
    ('moscow', 'bmw x6', 5000), 
    ('prague', 'skoda octavia', 1000); 

出力は、すべての列と下のリストと同じにする必要があります。一般的にwindow functionsを使用して解決される

city   name    price 
----------------------------------------- 
'los angeles' 'lexus nx'   2000 
'los angeles' 'chevrolet camaro' 2800 
'moscow'  'lexus lx'   5000 
'moscow'  'bmw x6'   5000 
'prague'  'skoda octavia' 1000 

答えて

2

問題:

select city,car,price 
from (
    select *, 
     dense_rank() over (partition by city order by price desc) as rnk 
    from city_car 
) t 
where rnk <= 2 
order by city, price desc; 

に応じて、どのように2倍の最高値を扱いたいのですか? nはrow_number()

オンライン例にdense_rank()を変更:http://rextester.com/ALKZ85776

+0

例データに基づいて、それはおそらく 'ROW_NUMBER'の代わりに、' DENSE_RANK'です – dnoeth

関連する問題