SQL-подзапрос Oracle: используя минимум, но получая все столбцы

                       MIN(A.price)  CustomerID     TripID travelby

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

Пытаюсь выяснить это. Приведенные выше результаты получены из запроса 2 таблиц. Однако мне нужно изменить его так, чтобы он давал мне результат минимальной цены со всеми 4 столбцами.

это был мой оригинальный sql:

(выберите min(цена) из поездок a, клиенты b, где a.tripid = b.tripid и c.travelmode = 'train')

Я могу получить только строку с 25, но это только если я запрашиваю столбец цены. Как бы вы пошли по этому поводу, но получить все столбцы? Спасибо за весь вклад

2 ответа

Решение
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'

Вы можете сделать что-то вроде этого:

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 синтаксис.
Другие вопросы по тегам