我的表格room
包含room_id
,hotel_id
,status
列。我想计算每家酒店有status
1
的房间数。
我想这将是一个count()
函数,但我该如何使用它?
我有这个:
SELECT hotel_id, (SELECT count(status) FROM room WHERE room.status = '1')
FROM room
GROUP BY hotelID
但它会计算所有所有拥有status = 1
的酒店的房间,我想要每个酒店的所有房间。
答案 0 :(得分:4)
您需要条件聚合。那是在聚合函数中嵌套case
语句的时候:
select hotel_id, sum(case when status = 1 then 1 else 0 end) as status1
from room
group by hotelID;
case
会根据状态返回0
或1
。 sum()
然后将它们全部添加起来。如果您想使用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