查询以显示请求的服务少于3次

时间:2018-08-16 08:38:09

标签: mysql sql

我正在寻找一个查询,该查询将带回仅被请求少于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次的服务即可:)

欢迎进行任何修改/询问以获取更多信息。我希望这将为您提供足够的信息来理解我的问题。

2 个答案:

答案 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的整个主意是,您可以将其用作引用,并且能够随时更改服务名称而无需不必担心其他表格会引用该服务。)