SQL计数由不同的ID

时间:2016-05-24 18:16:31

标签: sql

如下表 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个管家?

2 个答案:

答案 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;

http://ideone.com/BySBSx