1

私はしばらくの間これを解決しようとしてきましたが、どんな助けでも大歓迎です。

私はテーブルを持っています:

distributor(distributor_name, distributor_id)
distributed(price, movie_id, distributor_id)
movie(title, movie_id)

各配給業者は、異なる価格の映画について複数のレコードを持っています。

特定の映画の最低価格と、どの配信者からのものを選択しようとしていますか?

これまで私は試しました:

select min(Price), Distributor from
(select m.distributor_name as Distributor, d.price from 
distributors m, distributed d, movies mo
where
mo.title = 'Movie Name' and mo.movie_id = d.movie_id and d.distributor_id = m.distributor_id)
group by Distributor;

各ディストリビューターの最低価格を返します。

私が実行した場合:

select min(Price)
(select m.distributor_name as Distributor, d.price from 
distributors m, distributed d, movies mo
where
mo.title = 'Movie Name' and mo.movie_id = d.movie_id and d.distributor_id = m.distributor_id);

その特定の映画の最低価格を示します。

最低価格でディストリビューターの名前を取得するにはどうすればよいですか?

4

1 に答える 1

1

Oracle のバージョンに応じて、以下を使用できますrow_number()

select price, distributor
from
(
  select d.price, 
    m.distributor_name as Distributor,
    row_number() over(order by d.price) rn
  from distributors m
  inner join distributed d
    on d.distributor_id = m.distributor_id
  inner join movies mo 
    on mo.movie_id = d.movie_id 
  where mo.title = 'Movie Name' 
) src
where rn = 1;

デモで SQL Fiddle を参照してください

これを拡張して、任意の映画の最低価格を取得したい場合は、データを映画のタイトルで分割できます。

select price, distributor
from
(
  select d.price, 
    m.distributor_name as Distributor,
    row_number() over(partition by mo.title order by d.price) rn
  from distributors m
  inner join distributed d
    on d.distributor_id = m.distributor_id
  inner join movies mo 
    on mo.movie_id = d.movie_id 
) src
where rn = 1;
于 2013-01-28T20:03:05.887 に答える