我希望列出所有酒店预订的Hotel_ID,Hotel_Name和客房总数。但是,我只需要向金级客户预订和购买超过8间客房的人展示。我是SQL的新手(大约一天前开始),所以请在我的错误中忍受我。
以下是我一直在尝试的内容,如果酒店预订的所有客房均为金级客人,则会显示酒店ID /姓名/总数,但如果有混合(例如某些客房/预订)由Gold等级预订,其他人由Silver预订,然后该酒店将不会出现。
(例如,如果希尔顿总共预订了12间客房,则所有金卡会员均可根据不同的预订ID进行预订。 s,它将显示希尔顿,[酒店ID],12。但如果Super 8共有10间客房由Gold会员预订,另外7间由Silver预订,那么它应该显示Super 8,[Hotel_ID],10 - The way我现在拥有它,希尔顿会工作,但Super 8的例子根本不会出现。
X-
以下是表格的设置方法。
HOTEL
Hotel_ID(1,2,3,4等)
Hotel_Name(希尔顿,万豪,丽兹,速8等)
房间信息
Booking_ID(101,102,103,104等)
Hotel_ID(见上文)
Number_Rooms(但是客人在特定的Booking_ID /日期下预订了许多房间)
的 BOOKING
Booking_ID(见上文)
Booking_Date(DD-MM-YY)
Guest_ID(1,2,3,4等)
的客人
Guest_ID(见上文)
Guest_Name(最后一个)
类(青铜,银,金)
答案 0 :(得分:0)
如果每家酒店需要至少8间由“金”客人预订的客房,并且您只想计算“黄金”预订(不是任何其他),那么下面的SELECT hotel.hotel_id, hotel.hotel_name,
SUM(Rooms.Number_Rooms) AS total_rooms_booked
FROM hotel
INNER JOIN rooms ON hotel.hotel_id=rooms.hotel_id
INNER JOIN bookings on rooms.booking_id = bookings.booking_id
INNER JOIN guests on bookings.guest_id = guests.guest_id
AND guests.class = 'Gold'
GROUP BY hotel.hotel_id, hotel.hotel_name
HAVING SUM(Rooms.Number_Rooms) > 8
ORDER BY hotel.hotel_id, hotel.hotel_name
就是您所需要的:< / p>
{{1}}
答案 1 :(得分:0)
您的预期输出令人困惑,因为您提到预订的客房总数还包括非黄金会员预订的客房,但您在提及的产品中再次提到计数应仅涉及金卡会员的预订。我假设后者:
select
h.hotel_id,
h.hotel_name,
sum(r.number_rooms) AS total_rooms_booked
from hotel h
join rooms r on h.hotel_id = r.hotel_id
join booking b on b.booking_id = r.booking_id
join guests g on g.guest_id = b.guest_id
where
g.class = 'gold'
group by
h.hotel_id, h.hotel_name
having
sum(r.number_rooms) > 8
请使用明确的JOIN
语法,而不是WHERE
子句中的旧式连接。
此外,您的模型似乎需要改进。为什么要在booking_id
表中包含rooms
列? booking
和rooms
的整个目的似乎有些模糊。这可以通过房间桌子来展示酒店内的房间和预订表,这将有效地标记您的客人(预订)酒店内客房的到达和离开时间。