给出下表A

FlightID| Roles
1       | Pilot
1       | Steward
1       | Steward
2       | Pilot
2       | Co-Pilot

如何确定每个不同航班的乘务员数量? 输出应如下所示:

FlightID| Count
1       | 2
2       | 0

首先,我尝试了:

select FlightID, count(Role) from A group by FlightID

但这给了我每次飞行的角色总数。 然后我尝试了:

select FlightID, count(Role) from A where Role="Steward" group by FlightID

这部分是正确的,因为它为我提供了每次航班的乘务员数量,但未考虑0个乘务员。 如何将0个管理员纳入结果?

===============>>#1 票数:3

您可以使用条件聚合。

select FlightID
,sum(case when Role = 'Steward' then 1 else 0 end) 
--or count(case when Role = 'Steward' then 1 end)
from A 
group by FlightID

===============>>#2 票数:2 已采纳

您的表上确实没有主键吗? 如果是这样,这是一个相当简单的LEFT JOIN

SELECT a1.FlightId, COUNT(a2.FlightId) 
FROM A a1 LEFT JOIN A a2 ON a1.id = a2.id
AND a2.Roles = 'Steward'
GROUP BY a1.FlightId;

http://ideone.com/BySBSx

  ask by Upvote translate from so

未解决问题?本站智能推荐: