我正在寻找一个查询,该查询将带回仅被请求少于3次的任何服务的结果。
我认为此查询涉及的表将是我的预订表,我的服务表和我的成员表。
这些列中的许多都将不相关,因此我将不包括它们以节省空间。
我的表格包括以下列
预订桌
-Booking_ID
-Service_Name_FK
-Member_Name_FK
服务表
-Service_ID
-Service_Name
-Charge_per_Service
会员表
-会员ID
-Member_Name(宠物)
-Owner_Name(此宠物的实际所有者)
我尝试了以下内容,并尝试了其他方法,但无法正常工作。
SELECT `Booking_ID`, `Member_Name_FK`, COUNT(DISTINCT`Service_ID_FK`) AS Services_Count
FROM Booking
GROUP BY Booking_ID, Member_Name_FK, Service_ID_FK
HAVING COUNT(DISTINCT Service_ID_FK) < 3
只需要列表中请求次数少于3次的服务即可:)
欢迎进行任何修改/询问以获取更多信息。我希望这将为您提供足够的信息来理解我的问题。
答案 0 :(得分:1)
根据提供的信息,您可以从一个表中完成此操作:
select service_name_fk, count(booking_id) as requested
from Booking
group by service_name_fk
having count(booking_id) <3
然后只需加入此查询即可填充其他信息
答案 1 :(得分:0)
您的查询正在尝试对每个预订的服务进行计数,但您希望每个服务的预订。最简单的方法可能是在子查询中计数:
select *
from services s
where 3 >
(
select count(*)
from booking b
where b.service_name_fk = s.service_name
);
(顺便说一句,通过服务名称链接表是个坏主意。拥有服务ID的整个主意是,您可以将其用作引用,并且能够随时更改服务名称而无需不必担心其他表格会引用该服务。)