SQL连接和聚合函数

SQL连接和聚合函数,sql,Sql,我需要查询以下语句: 显示为客户预订4辆以上车辆的所有员工的详细信息 模式如下: Staff (staffID, firstname, lastname, xyz..) Customers (customerID, firstname, lastname, xyz..) Booking (bookingID, staffID, customerID, vehicleregistration, date) Vehicle (vehicleregistration, make, model,

我需要查询以下语句:

显示为客户预订4辆以上车辆的所有员工的详细信息

模式如下:

Staff (staffID, firstname, lastname, xyz..)

Customers (customerID, firstname, lastname, xyz..)

Booking (bookingID, staffID, customerID, vehicleregistration, date)

Vehicle (vehicleregistration, make, model, xyz..) 
干杯

我收集到所有预订记录都是客户的实际车辆租赁记录。所以你要计算每个员工的人数。按员工人数翻译成按员工分组。要检查聚合结果(计数),可以使用
HAVING
子句

SELECT staffID,COUNT(vehicleregistration) FROM Staff JOIN Booking ON Staff.staffID = Booking.staffID JOIN Vehicle ON Vehicle.vehicleregistration = Booking.vehicleregistration GROUP BY staffID HAVING COUNT(vehicleregistration) > 4
select * 
from staff
where staffid in
(
  select staffid
  from booking
  group by staffid
  having count(*) > 4
);
如您所见,不需要连接任何东西,因为您只需要staff表中的数据。预订计数是更好地属于
WHERE
子句的标准

select * 
from staff
where staffid in
(
  select staffid
  from booking
  group by staffid
  having count(*) > 4
);
为了完整性起见,这里的连接也是一样的:

select s.* 
from staff s
join
(
  select staffid
  from booking
  group by staffid
  having count(*) > 4
) b on b.staffid = s.staffid;
我觉得这不太可读,但有些人可能还是喜欢它。如果您想在结果中显示来自聚合的信息(在您的例子中是计数),则可以使用此选项

select s.*, b.bookings
from staff s
join
(
  select staffid, count(*) as bookings
  from booking
  group by staffid
  having count(*) > 4
) b on b.staffid = s.staffid;
我收集到的所有预订记录都是客户的实际车辆租赁记录。所以你要计算每个员工的人数。按员工人数翻译成按员工分组。要检查聚合结果(计数),可以使用
HAVING
子句

select * 
from staff
where staffid in
(
  select staffid
  from booking
  group by staffid
  having count(*) > 4
);
如您所见,不需要连接任何东西,因为您只需要staff表中的数据。预订计数是更好地属于
WHERE
子句的标准

select * 
from staff
where staffid in
(
  select staffid
  from booking
  group by staffid
  having count(*) > 4
);
为了完整性起见,这里的连接也是一样的:

select s.* 
from staff s
join
(
  select staffid
  from booking
  group by staffid
  having count(*) > 4
) b on b.staffid = s.staffid;
我觉得这不太可读,但有些人可能还是喜欢它。如果您想在结果中显示来自聚合的信息(在您的例子中是计数),则可以使用此选项

select s.*, b.bookings
from staff s
join
(
  select staffid, count(*) as bookings
  from booking
  group by staffid
  having count(*) > 4
) b on b.staffid = s.staffid;

我们在这里帮助您提高技能,而不是为您编写代码。如果您需要有人编写代码,请尝试upwork。对我来说,这听起来也很像一个家庭作业问题。看起来像是一种家庭作业。你有没有试着做点什么?我理解连接,但我不确定聚合和连接。我的想法大致如下:@Ableman使用您当前的代码更新您的问题,这样我们就可以看到您缺少了什么,最好不要在评论中发布代码。您没有提到哪个数据库,因为不同的数据库具有不同种类的内置功能,并且基于功能的查询可能会更改。基于所给出的一些细节,您的解决方案可能需要分组和拥有。我们在这里帮助您提高技能,而不是为您编写代码。如果您需要有人编写代码,请尝试upwork。对我来说,这听起来也很像一个家庭作业问题。看起来像是一种家庭作业。你有没有试着做点什么?我理解连接,但我不确定聚合和连接。我的想法大致如下:@Ableman使用您当前的代码更新您的问题,这样我们就可以看到您缺少了什么,最好不要在评论中发布代码。您没有提到哪个数据库,因为不同的数据库具有不同种类的内置功能,并且基于功能的查询可能会更改。根据所给出的几个细节,您的解决方案可能需要分组和进行。