我有一个MySQL表,用于存储酒店预订的数据。 我需要一个查询来查看每个日期住在酒店的客人数量。
我能够创建一个查询(使用子查询),但执行速度非常慢。有没有更好的方法来获取所请求的数据? (例如,将表连接到自身,或者其他任何内容。)
我的查询是:
SELECT CheckOutDate AS Date,
(SELECT SUM(NrOfGuests) FROM tblGuests tG
WHERE tG.CheckInDate <= tblGuests.CheckOutDate
AND tG.CheckOutDate > tblGuests.CheckOutDate
AND tG.IsCancelled = False AND tG.NoShow = False)
AS NrOfGestsStaying
FROM tblGuests
GROUP BY CheckOutDate
使其表现更快的最佳方法是什么?
答案 0 :(得分:1)
在原始查询中,SELECT使用子查询在表的每一行上返回SUM。之后使用group by CheckOutDate
删除重复项。换句话说,这是SUM(NrOfGuests)
的{{1}}。
您可以通过子distinct CheckOutDate
来提前删除重复的CheckOutDate。因此,在接收查询中,SUM仅应用distinct CheckOutDate
:
distinct CheckOutDate