如下表 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个管家?
答案 0 :(得分: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
答案 1 :(得分: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;