пытаясь получить номера отелей, которые получили наибольшую прибыль в запросе - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь реализовать запрос, который дает мне сумму наиболее выгодного номера в каждом отеле (25 отелей)

Ниже мой запрос:

SELECT hotels.hotel_id,rooms.room_id,hotel_name,room_number,sum(rooms.room_price) AS profit,COUNT(rooms.room_id) AS count FROM hotels,rooms,bookings WHERE hotels.hotel_id=rooms.hotel_id AND rooms.room_id=bookings.room_id GROUP BY rooms.room_id

и это самый близкий результат, который я получил .. не обращайте внимания на язык названий отелей

Это результат, которого я достиг до сих пор,

отели

номера

бронирование с.1

бронирование с.2 (остальные записи)

hotel_id 1 имеет 5 номеров, номер room_number 300 принес наибольшую прибыль.Я хочу показать наибольшую прибыль только в каждом отеле.Мне не нужны другие комнаты, которые приносили меньше прибыли.


Обновление: Итак, я решил аналогичный запрос, в котором я хочу получить лучшие 2 комнаты, которые принесли наибольшую прибыль.Но я просто не могу придумать ни одной функции, которая может дать мне только лучшую прибыль от каждого отеля.маленький намек или помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Попробуйте этот запрос:

SELECT * FROM 
(SELECT hotels.hotel_id,rooms.room_id,hotel_name,room_number,SUM(rooms.room_price) AS profit,COUNT(rooms.room_id) AS COUNT
FROM hotels,rooms,bookings
WHERE hotels.hotel_id=rooms.hotel_id
AND rooms.room_id=bookings.room_id
GROUP BY rooms.room_id) a GROUP BY hotel_id;

Edit:

Это может сделать это:

SELECT hotel_id,room_id,room_number,MAX(a.tc) AS "Count",MAX(tp) AS "MostProfit" FROM
(SELECT hotel_id,rooms.room_id,room_number,COUNT(rooms.room_id) AS "tc",SUM(room_price) AS "tp" FROM rooms JOIN bookings 
ON rooms.room_id=bookings.room_id
GROUP BY rooms.room_id) a GROUP BY hotel_id
0 голосов
/ 14 марта 2019

Пожалуйста, попробуйте ниже один раз:

SELECT RO_BOOK.HOTEL_ID,
       RO_BOOK.ROOM_ID,
       RO_BOOK.ROOM_NUMBER,
       RO_BOOK.TOTAL_BOOKINGS,
       MAX(RO_BOOK.TOTAL_EARNINGS) PROFITS
FROM(
    SELECT  ROOMS.HOTEL_ID
        ROOMS.ROOM_ID,
        ROOMS.ROOM_NUMBER,
        COUNT(ROOMS.ROOM_ID) TOTAL_BOOKINGS
        SUM(ROOMS.ROOM_PRICE) TOTAL_EARNINGS
    FROM 
        ROOMS, BOOKINGS
    WHERE 
        BOOKINGS.ROOM_ID = ROOMS.ROOM_ID
        GROUP BY ROOMS.ROOM_ID) RO_BOOK
GROUP BY RO_BOOK.HOTEL_ID ;

Это похоже на код @ tcadidot0, но столбец MAX (a.tc) AS "Count" возвращает максимальное количество независимо от ROOM_ID.Например, если в отеле 1 есть 2 номера, скажем, R100 и R200.Стоимость R100 будет 1000, а R200 будет 100. Количество забронированных R100 не будет 1, а R200 будет 3. Таким образом, запрос вернет: HOTEL 1, R100, COUNT 2, PROFIT 1000.

Пожалуйста, исправьте меняесли я неправильно понял вопрос.

...