sql计算中的Count()
我有一张桌子sql计算中的Count(),sql,postgresql,count,Sql,Postgresql,Count,我有一张桌子room,上面列有room\u id,hotel\u id,status。我想计算每个酒店中有多少房间的状态为1 我想这将是一个count()函数,但是如何使用它呢 我有这个: SELECT hotel_id, (SELECT count(status) FROM room WHERE room.status = '1') FROM room GROUP BY hotelID 但是它统计所有状态为1的酒店的所有房间,我需要每个酒店的所有房间。您需要条件聚合。即在聚合函数中嵌套cas
room
,上面列有room\u id
,hotel\u id
,status
。我想计算每个酒店中有多少房间的状态为1
我想这将是一个count()
函数,但是如何使用它呢
我有这个:
SELECT hotel_id, (SELECT count(status) FROM room WHERE room.status = '1')
FROM room
GROUP BY hotelID
但是它统计所有状态为1的酒店的所有房间,我需要每个酒店的所有房间。您需要条件聚合。即在聚合函数中嵌套case
语句:
select hotel_id, sum(case when status = 1 then 1 else 0 end) as status1
from room
group by hotelID;
案例
根据状态返回0
或1
。然后,sum()
将它们全部相加。如果要使用count()
,可以删除else
子句(或使用else NULL
):
我更喜欢使用sum()
的方法,您需要条件聚合。即在聚合函数中嵌套case
语句:
select hotel_id, sum(case when status = 1 then 1 else 0 end) as status1
from room
group by hotelID;
案例
根据状态返回0
或1
。然后,sum()
将它们全部相加。如果要使用count()
,可以删除else
子句(或使用else NULL
):
我更喜欢使用sum()
select hotel_id,
(select count(status) from room sr where sr.status='1' and sr.hotel_id = room.hotelID)
from room
group by hotelID
您需要过滤掉其余的结果:
select hotel_id,
(select count(status) from room sr where sr.status='1' and sr.hotel_id = room.hotelID)
from room
group by hotelID
和sr.hotel\u id=room.hotelID
通过使用它可以确保它将检查每个hotelID?它是一个子查询,将对结果的每一行执行。我在where子句中添加了只计算与当前行相关的hotel_id的值。和sr.hotel_id=room.hotelID
通过使用该值,它可以确保检查每个hotelID?它是一个子查询,将对结果的每一行执行。我在where子句中添加了只计算与当前行相关的hotel_id。