在SQL中计算Count()

时间:2014-05-03 17:54:27

标签: sql postgresql count

我的表格room包含room_idhotel_idstatus列。我想计算每家酒店有status 1的房间数。

我想这将是一个count()函数,但我该如何使用它?

我有这个:

SELECT hotel_id, (SELECT count(status) FROM room WHERE room.status = '1')
FROM room
GROUP BY hotelID

但它会计算所有所有拥有status = 1的酒店的房间,我想要每个酒店的所有房间。

2 个答案:

答案 0 :(得分:4)

您需要条件聚合。那是在聚合函数中嵌套case语句的时候:

select hotel_id, sum(case when status = 1 then 1 else 0 end) as status1
from room
group by hotelID;

case会根据状态返回01sum()然后将它们全部添加起来。如果您想使用count(),可以通过删除else子句(或使用else NULL)来执行此操作:

select hotel_id, count(case when status = 1 then 1 end) as status1
from room
group by hotelID;

我更喜欢使用sum()的方法。

答案 1 :(得分:2)

您需要过滤掉其余结果:

select hotel_id, 
  (select count(status) from room sr where sr.status='1' and sr.hotel_id = room.hotelID) 
from room
group by hotelID