Как получить общий номер в отеле и забронированный номер в одном запросе.
Я использовал 2 запроса, чтобы получить результат. Мне это нужно в одном запросе.
Проблема, с которой я столкнулся, поскольку все значения указаны в этой таблице htl_room_information.id_hotel
Забронированный номер:
SELECT x.hotel_name
, count(i.id_hotel) room
FROM htl_booking_detail d
JOIN htl_branch_info_lang x
ON x.id=d.id_hotel
JOIN htl_room_information i
ON d.id_room=i.id
group
by x.hotel_name;
+------------------------------------------+------+
| hotel_name | room |
+------------------------------------------+------+
| hotel | 3 |
| hotel1 | 1 |
| hotel2 | 4 |
| hotel3 | 13 |
| hotel4 | 9 |
| hotel5 | 3 |
| hotel6 | 3 |
| hotel7 | 2 |
+------------------------------------------+------+
Всего комнат
SELECT (htl_branch_info_lang.hotel_name) as hotel_name,count(htl_room_information.id_hotel) as total_room FROM htl_room_information ,htl_branch_info_lang where htl_room_information.id_hotel=htl_branch_info_lang.id group by htl_branch_info_lang.hotel_name;
+------------------------------------------+------------+
| hotel_name | total_room |
+------------------------------------------+------------+
| hotel | 219 |
| hotel2 | 25 |
| hotel3 | 16 |
| hotel4 | 5 |
| hotel5 | 55 |
| hotel6 | 27 |
| hotel7 | 56 |
| hotel8 | 52 |
+------------------------------------------+------------+
Мне нужны эти 2 карьера вместе, чтобы подсчитать общую комнату и забронированную комнату в одном запросе. Затем я прикрепляю это к нашей панели инструментов метабазы.






Вы можете использовать подзапрос попробуй это:
SELECT (a.hotel_name) as
hotel_name,count(htl_room_information.id_hotel) as total_room, (SELECT
count(htl_room_information.id_hotel) as room FROM htl_booking_detail,
htl_branch_info_lang b, htl_room_information WHERE
b.id=htl_booking_detail.id_hotel and
htl_booking_detail.id_room=htl_room_information.id and
b.hotel_name = a.hotel_name), count(htl_room_information.id_hotel) - (SELECT
count(htl_room_information.id_hotel) as room FROM htl_booking_detail,
htl_branch_info_lang b, htl_room_information WHERE
b.id=htl_booking_detail.id_hotel and
htl_booking_detail.id_room=htl_room_information.id and
b.hotel_name = a.hotel_name) as available FROM htl_room_information
,htl_branch_info_lang
a where htl_room_information.id_hotel=a.id group by
a.hotel_name;
Уважаемый Ренц, он не работает, я вижу ошибку ниже: java.sql.SQLException: Subquery возвращает более 1 строки
теперь я получаю ошибку ниже: ОШИБКА 1054 (42S22): Неизвестный столбец 'htl_branch_info_lang.hotel_name' в 'списке полей'
@KrishnaPrasad, извините, я не эксперт, просто пытаюсь помочь, но снова отредактировал, вы можете попробовать.
@ Renz, теперь все работает нормально. Большое Вам спасибо. Теперь мне нужна разница между счетом
@KrishnaPrasad Рад, что помог, пожалуйста, проголосуйте за мой ответ и примите его как правильное
проголосовал спасибо. где я могу добавить столбец с датой между запросами, чтобы я мог фильтровать его по дате
@KrishnaPrasad сразу после того, как GROUP BY сделает
Дело в том, что если я выберу разные даты, это не приведет к вычислению «Доступной комнаты». Фактически доступная комната должна измениться по дате. Но это не расчет. Как я могу получить правильный расчет. where caluse Я добавил это {{from_date}}, чтобы получить дату и дату между датами результата. Бит его не засчитывает свободные номера.
Надеюсь, я правильно понял ваш вопрос.
Пожалуйста, проверьте запрос ниже.
select b.hotel_name hotel_name, a.room ,
b.total_room
from
(SELECT htl_branch_info_lang.hotel_name,
count(htl_room_information.id_hotel) as room FROM htl_booking_detail,
htl_branch_info_lang, htl_room_information WHERE
htl_branch_info_lang.id=htl_booking_detail.id_hotel and
htl_booking_detail.id_room=htl_room_information.id group by
htl_branch_info_lang.hotel_name ) a RIGHT join (SELECT (htl_branch_info_lang.hotel_name) as
hotel_name,count(htl_room_information.id_hotel) as total_room
FROM htl_room_information ,htl_branch_info_lang
where htl_room_information.id_hotel=htl_branch_info_lang.id
group by htl_branch_info_lang.hotel_name) b
on a.hotel_name = b.hotel_name
;
Уважаемый Таджиндер, я получаю ошибку ниже: ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования около 'полного внешнего соединения (SELECT (htl_branch_info_lang.hotel_name) как hotel_name, count (h' в строке 1
В случае, если это помогло, попросив вас проголосовать за ответ, проследите, чтобы другие пользователи также получили помощь.
Извините, что спрашиваю еще раз, дело в том, что мне нужна свободная комната = общая комната - забронированная комната. Как я могу добиться этого по дате или в промежутке между датами. Я использую метабазу для выбора дат в запросе.
Используйте зависимые подзапросы.
SELECT x.hotel_name,
(
SELECT count(i.id_hotel)
FROM htl_booking_detail d
JOIN htl_room_information i
ON d.id_room=i.id
WHERE x.id=d.id_hotel
) as room,
(
SELECT count(i.id_hotel)
FROM htl_room_information i
WHERE i.id_hotel=x.id
) as total_room
FROM htl_branch_info_lang x
Я предполагаю, что hotel_name уникален в таблице htl_branch_info_lang. В противном случае вы должны поместить distinct за первым SELECT.
Что не так с двумя запросами?