Ron23111 Ответов: 2

Как получить большинство арендованных автомобилей в SQL-запросе


Предположим, у меня есть таблица со столбцом CarID, и каждый идентификатор сдается в аренду клиенту, когда он приходит его арендовать. То, что я хочу иметь возможность узнать, - это с помощью SQL-запроса, что такое 5 наиболее сдаваемых в аренду автомобилей, Какие автомобили нравятся клиенту и арендуются больше всего, а какие автомобили сдаются в аренду 5 наименее сдаваемых в аренду автомобилей.

Итак, как же мне это сделать с помощью sql-запроса

Пожалуйста ответьте ASSP
Спасибо.

Что я уже пробовал:

Создайте процедуру dbo.SPCarRental_GetRentedCarsTop5
АС
ВЫБИРАТЬ *
От [CarRental]
ГДЕ
(
CarID в
(
Выберите верхний (5) CarID
Из [CarRental] как таблица 1
Группа по CarID
Заказ по CarID алфавиту
)
)

2 Ответов

Рейтинг:
2

MadMyche

Без вашей схемы БД довольно трудно ответить на этот вопрос, так как мы можем только предполагать, какие данные у вас есть.

Вы ссылались на таблицу Карренталь в запросе. Я предполагаю, что это отдельные оговорки для конкретного автомобиля, идентифицированные колонкой Карид Если бы это была моя (нормализованная) БД, у меня также была бы таблица для Машина с ПК CarID, как указано в таблице аренды.

Если все это правда, то запрос, который вы представили, предоставит вам подробную информацию о бронировании, а не столько о самих автомобилях. Даже если это то, что вы хотели, вы не получите 5 самых популярных, так как ваша агрегация находится только на CarID (по сути, ничего не делая) и сортировка по CarID. Тогда вполне разумно предположить, что подзапрос всегда будет отвечать последними 5 CarIDs в порядке убывания
Однако то, что вы хотели бы сделать, - это сохранить агрегат на основе CarID; вы хотите сделать заказ на количество этих Carid, убывая

SELECT   *
FROM     CarRental
WHERE    CarID IN (
   SELECT   TOP (5) CarID
   FROM     CarRental
   GROUP BY CarID
   ORDER BY Count(CarID) DESC
)

Если я был прав в своей схеме БД, то у вас есть таблица Car; и вместо этого вы хотели получить сведения о машине - запрос легко редактировать, чтобы основной запрос ссылался на эту таблицу и сохранял подзапрос как есть:
SELECT   *
FROM     Car
WHERE    CarID IN (
   SELECT   TOP (5) CarID
   FROM     CarRental
   GROUP BY CarID
   ORDER BY Count(CarID) DESC
)


Ron23111

Да у меня есть столик в машине

MadMyche

Это одна из тех важных вещей, которые нужно сделать в первоначальном вопросе; сообщить нам, что у вас есть, и четко указать, что вы хотите - все арендованные автомобили или только список автомобилей; и, возможно, сколько раз каждый из них был арендован

Ron23111

Спасибо, что это сработало для меня, и если я хочу показать 5 наименее арендованных грузовиков, чем

MadMyche

. затем вы измените порядок на ASC в подзапросе

Ron23111

Хорошо большое спасибо вам СУ за вашу помощь

Рейтинг:
1

Mehdi Gholam

Разбивайте предложения и пишите подзапросы, пока не получите то, что хотите.

"5 самых арендованных автомобилей" -> подсчитайте автомобили по идентификатору и отсортируйте по убыванию

"какие автомобили нравятся клиенту" -> подсчет автомобилей по идентификатору сортировка по убыванию наличия идентификатора клиента