gpt4 book ai didi

mysql - SQL 具有共同值的最大记录数

转载 作者:行者123 更新时间:2023-11-29 01:03:53 26 4
gpt4 key购买 nike

请考虑以下两个表:

Holidays
HolidayID (PK)
Destination
Length
MaximumNumber
...


Bookings
BookingID (PK)
HolidayID (FK)
Name
...

客户可以预订假期(例如去夏威夷)。但是,假设给定的假期有最大数量的地方。例如今年夏威夷只有 75 个假期(忽略其他年份)。

因此,如果某些客户想预订去夏威夷度假。我需要计算 Bookings 表中的记录,如果该数字大于 75,我必须告诉客户为时已晚。我可以使用 2 个 MySQL 查询(1 个用于获取假期的 MaximumNumber,2 个用于从 Bookings 获取当前总数)和 PHP(例如)将计数值与夏威夷假期的最大数量进行比较。但我想知道是否有一种方法可以纯粹在 SQL 中执行此操作(在本例中为 MySQL)?即计算夏威夷的预订数量并与夏威夷的 MaximumNumber 值进行比较。

编辑:我的方法:

$query1 = "SELECT MaximumNumber FROM Holidays WHERE HolidayID=$hawaiiID";

$query2 = "SELECT COUNT(BookingID) FROM Bookings WHERE HolidayID=$hawaiiID";

因此,如果第一个查询给出 75,第二个查询给出 75,我可以在 PHP 中比较这些值。但我想知道是否有办法仅在 SQL 中以某种方式完成此操作。

最佳答案

也许我遗漏了什么,但为什么不使用子查询来确定每个 holidayid 的总预订量:

select *
from holidays h
left join
(
select count(*) TotalBooked, HolidayId
from bookings
group by holidayId
) b
on h.holidayId = b.holidayId
WHERE h.HolidayID=$hawaiiID;

参见 SQL Fiddle with Demo .

然后你可以使用 CASE用于比较 TotalBooked 的表达式到 MaxNumber类似这样:

select h.destination,
case
when b.totalbooked = h.maxNumber
then 'Not Available'
else 'You can still book' end Availability
from holidays h
left join
(
select count(*) TotalBooked, HolidayId
from bookings
group by holidayId
) b
on h.holidayId = b.holidayId
WHERE h.HolidayID=$hawaiiID;

参见 SQL Fiddle with Demo .

你会注意到我使用了 LEFT JOIN这将返回 Holidays 中的所有行表,即使 Bookings 中没有匹配的行 table 。

关于mysql - SQL 具有共同值的最大记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799151/

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