2017-04-23 6 views
-1
     MIN(A.price) CustomerID  TripID travelby 

        25 x05    66 train 
           66 x07    21 train 
           100 x07    12 train 

を得ます。上記の結果は2つのテーブルのクエリからのものです。しかし、私はそれが私にその4つの列のすべてで最小価格の結果を与えるようにそれを修正する必要があります。のOracle SQLのサブクエリ:最小を使用しますが、すべての列、このいずれかを把握しようと

これは私のオリジナルのSQLた:私は

( a.tripid = b.tripidとc.travelmode = '電車' B旅行、顧客からの分(価格) を選択)

25行しか取得できませんが、それは私が価格列を要求した場合のみです。どうやってこのことをやってみるのですか?あなたはこのような何か行うことができ、すべての入力

答えて

1
SELECT * 
FROM (
    SELECT * 
    FROM trips a 
     INNER JOIN customers b 
     ON (a.tripid = b.tripid) 
    WHERE travelby = 'train' 
    ORDER BY price ASC 
) 
WHERE ROWNUM = 1; 

または

SELECT * 
FROM (
    SELECT price, 
     CustomerID, 
     a.TripID, 
     travelby, 
     ROW_NUMBER() OVER (ORDER BY price ASC) AS rn 
    FROM trips a 
     INNER JOIN customers b 
     ON (a.tripid = b.tripid) 
    WHERE travelby = 'train' 
    ORDER BY price ASC 
) 
WHERE rn = 1; 

または:

SELECT MIN(price) AS price, 
     MIN(CustomerID) KEEP (DENSE_RANK FIRST ORDER BY price, ROWNUM) AS CustomerID, 
     MIN(a.TripID ) KEEP (DENSE_RANK FIRST ORDER BY price, ROWNUM) AS TripID, 
     MIN(travelby ) KEEP (DENSE_RANK FIRST ORDER BY price, ROWNUM) AS travelby 
FROM trips a 
     INNER JOIN customers b 
     ON (a.tripid = b.tripid) 
WHERE travelby = 'train' 
+0

ありがとうMT0。それはうまくいった。 – DaviRoli

0

いただきありがとうございます:クエリの

select . . . 
from (select . . ., row_number() over (order by price desc) as seqnum 
     from trips t join 
      customers c 
      on c.tripid = t.tripid and ?.travelmode = 'train' 
    ) 
where seqnum = 1; 

はあなたのバージョンを非常に紛らわしいです:

  • それが括弧で囲まれているのはなぜ?
  • c.travelmodeとは何ですか?テーブルエイリアスcを定義していません。
  • 正しい、明示的なJOINの構文を使用する方法を学んでください。
+0

ゴードン、入力をお願いいたします。私はちょうどSQLの開発者のクエリ内の別のクエリからそれをコピーしたので、括弧がそこにあった。それらを削除するのを忘れました。 travelmodeは実際にtravelbyとして意味されていました。 – DaviRoli

関連する問題