Mysql - группировка результатов на основе математической операции и функции SUM () - PullRequest
0 голосов
/ 17 апреля 2010

У меня есть следующие две таблицы ...

Таблица: тип комнаты

 type_id    type_name   no_of_rooms     max_guests  rate    
  1          Type 1         15               2      1254    
  2          Type 2         10               1      3025

Таблица: бронирование

reservation_id  start_date  end_date    room_type   booked_rooms    
       1        2010-04-12  2010-04-15      1            8 
       2        2010-04-12  2010-04-15      1            2 

Теперь ... У меня есть этот запрос

SELECT type_id, type_name
FROM room_type
WHERE id NOT IN (SELECT room_type
             FROM reservation
             WHERE start_date >= '$start_date'
             AND   end_date <= '$end_date')

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

Кроме того, как вы можете видеть из таблицы бронирования, у нас также есть «количество номеров, забронированных между двумя датами» ...

Мне нужно добавить этот коэффициент «количество забронированных номеров между двумя датами» также в запрос ...

Запрос должен возвращать тип комнат, для которых по крайней мере одна комната свободна между двумя датами.

Я разработал логику, но просто не могу представить ее как запрос ....! Как ты это сделаешь ...?

Спасибо за ваши предложения ..!

1 Ответ

1 голос
/ 17 апреля 2010

Ваш результат может быть получен в этом

 SELECT a.type_id, a.type_name, a.no_of_rooms, (

SELECT SUM( booked_rooms )
FROM reservation
WHERE room_type = a.type_id
AND start_date >= '2010-04-12'
AND end_date <= '2010-04-15'
) AS booked_rooms, (
a.no_of_rooms - (
SELECT SUM( booked_rooms )
FROM reservation
WHERE room_type = a.type_id
AND start_date >= '2010-04-12'
AND end_date <= '2010-04-15' )
) AS freerooms
FROM room_type AS a
LEFT JOIN reservation AS b ON a.type_id = b.room_type
GROUP BY a.type_id
ORDER BY a.type_id
...