我有一个包含以下架构的表。
关系数据库架构:
Hotel = hotelNo, hotelName, city
Room = roomNo, hotelNo(FK), type, rate
Guest = guestNo, guestName, guestAddress
Booking = hotelNo(FK), guestNo(FK), dateFrom, dateTo, roomNo(FK)
每个表格中都有条目,但是他们的数据与此问题并不完全相关。
我需要计算每家酒店的平均预订数量,确保我包含目前没有预订的酒店。
我有这个:
- 调用此选择1
select count(*)
from booking b, hotel h
where b.hotelNo=h.hotelNo;
- 调用此选择2
select count(*)
from hotel;
选择1可返回预订总数。选择2可返回酒店总数。如果我可以简单地将选择1中的计数输出除以选择2中的计数输出,我会得到答案。
如果有可能,有人可以帮我提供代码,否则有人会想到一个替代解决方案来实现相同的结果吗?
答案 0 :(得分:2)
如果通过“平均预订次数”,您只想将这两个数字分开,那么您可以这样做:
select count(b.HotelNo) / count(distinct h.hotelNo)
from hotel h left join
booking b
on h.hotelNo = b.hotelNo;
答案 1 :(得分:1)
创建一个视图说temp以获取每个酒店的房间数量[您在视图中看到的数据,实际上并未存储在任何地方,并且是从动态表格中生成的。]
create view temp
as select hotelNo,count(*) as cnt from room group by hotelNo;
使用以下查询获取平均值。
select booking.hotelNo,count(*) / cnt
from booking ,temp
where booking.hotelNo = temp.hotelNo
group by booking.hotelNo;
或
select booking.hotelNo,count(*) / cnt
from booking
INNER JOIN temp
on booking.hotelNo = temp.hotelNo
group by booking.hotelNo;
这不包括没有预订的酒店。