SQL将一个计数结果除以另一个OR备用解决方案

时间:2016-08-29 09:31:53

标签: sql sql-server select count divide

我有一个包含以下架构的表。

关系数据库架构:

 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中的计数输出,我会得到答案。

如果有可能,有人可以帮我提供代码,否则有人会想到一个替代解决方案来实现相同的结果吗?

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;

这不包括没有预订的酒店。