SQL连接和聚合函数
我需要查询以下语句: 显示为客户预订4辆以上车辆的所有员工的详细信息 模式如下:SQL连接和聚合函数,sql,Sql,我需要查询以下语句: 显示为客户预订4辆以上车辆的所有员工的详细信息 模式如下: Staff (staffID, firstname, lastname, xyz..) Customers (customerID, firstname, lastname, xyz..) Booking (bookingID, staffID, customerID, vehicleregistration, date) Vehicle (vehicleregistration, make, model,
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使用您当前的代码更新您的问题,这样我们就可以看到您缺少了什么,最好不要在评论中发布代码。您没有提到哪个数据库,因为不同的数据库具有不同种类的内置功能,并且基于功能的查询可能会更改。根据所给出的几个细节,您的解决方案可能需要分组和进行。