novichok91
Дата: 16.10.2015 21:52:16
Привет всем. Подскажите как правильно написать SQL запрос в Oracle, для решения такой задачи:
база включает 3 таблицы:
1 таблица "Корпуса": идентификатор, имя корпуса(предприятия),
2 таблица "Автомобили": идентификатор, идентификатор корпуса(предприятия), номер автомобиля,
3 таблица "Выезды": идентификатор, идентификатор машины, пробег за выезд.
Нужно написать SQL-запрос, который выведет по 5 автомобилей с максимальным суммарным пробегом, от каждого корпуса. Подскажите как написать такой запрос? Просто запрос, который выведет суммарный пробег каждой машины и сгруппирует машины по корпусам - это не проблема. Но как взять и вывести конкретное число машин для каждого корпуса, да ещё и с максимальным суммарным пробегом, не могу понять.
ProgMann
Дата: 16.10.2015 22:15:53
Смотрите запросы с аналитическими функциями RANK / DENSE_RANK, OVER, PARTITION BY, ORDER BY
ttioho
Дата: 16.10.2015 22:21:00
типа того, может с просто ранк
select * from
(select b.body_id, b.body_name, s.car_id, dense_rank() over (partition by b.body_id, s.car_id order by s.miles_per_car) dr
from bodies b, (select c.body_id, c.car_id, sum(r.mileage) miles_per_car from cars c, runs r
where c.car_id = r.car_id
group by c.body_id, c.car_id) s
)
where dr <= 5