gpt4 book ai didi

mysql - 有没有一种方法可以比这个更快地创建 SQL 查询?

转载 作者:行者123 更新时间:2023-11-29 10:31:08 24 4
gpt4 key购买 nike

我有一个 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

让它执行得更快的最佳方法是什么?

最佳答案

在原始查询中,SELECT 使用子查询对表的每一行返回 SUM。随后使用 group by CheckOutDate 删除重复项。因此,换句话说,这是不同 CheckOutDateSUM(NrOfGuests)

您可以通过子查询distinct CheckOutDate提前删除重复的CheckOutDate。因此,在接收查询中,SUM 仅针对不同的 CheckOutDate 应用一次:

SELECT dT.CheckOutDate
,(SELECT SUM(NrOfGuests)
FROM tblGuests tG
WHERE tG.CheckInDate <= dT.CheckOutDate
AND tG.CheckOutDate >= dT.CheckOutDate
AND tG.IsCancelled = 0
AND tG.NoShow = 0
) AS NrOfGuests
FROM (
SELECT DISTINCT CheckOutDate
FROM tblGuests
) AS dT
ORDER BY dT.CheckOutDate

关于mysql - 有没有一种方法可以比这个更快地创建 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47388296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com